This project is a demonstrator of pattern instanciation on system engineering model (pseim), made by the MOISE project. It contains the metamodel of the pseim, graphical and textual editors, formal verification models (event-B) and examples.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

32663 lines
2.8 MiB

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<org.eventb.core.prFile version="1">
<org.eventb.core.prProof name="INITIALISATION/comp/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prHyps="">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p0" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p1"/>
<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="p2"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p3"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈Model">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈Model">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="¬Mdl=Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Mdl≠Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="comp_disj/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m1,m2" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p4">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p2" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p3"/>
<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="p5"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m1,m2)" org.eventb.core.prGoal="p4" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p8" org.eventb.core.prHyps="p7">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p8" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p9">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p9" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p10">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1"/>
<org.eventb.core.prExprRef name=".subst" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p12" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p14">
<org.eventb.core.prRule name="r1" 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="p11">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1"/>
<org.eventb.core.prExprRef name=".subst" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒m1∈dom(components)∧components∈Model ⇸ ℙ(Component)∧m2∈dom(components)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒m1∈dom(components)∧components∈Model ⇸ ℙ(Component)∧m2∈dom(components)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="m2∈dom(components)">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="m2∈Model">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬m1=m2⇒m1∈dom(components)∧components∈Model ⇸ ℙ(Component)∧m2∈dom(components)">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬m1=m2">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="m1∈dom(components)">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="m1∈Model">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="m1∈dom(components)∧components∈Model ⇸ ℙ(Component)∧m2∈dom(components)">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="cont/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p2" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p3"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4">
<org.eventb.core.prRule name="r0" 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="p5">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p5" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p7">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p7" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p8">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type 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="r5" 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.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.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p10">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p10" 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.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="(∀m⦂Model·m∈dom(components))∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="m∈dom(components)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="m∈Model">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m⦂Model·⊤⇒m∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈dom(components)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Model⇒m∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/comp_disj/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m1,m2" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p3">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<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="p4"/>
<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 (frees m1,m2)" org.eventb.core.prGoal="p3" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p8" org.eventb.core.prHyps="p7"/>
</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="components'" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Mdl∈Model">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Pat∈Model">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="components'(m1)∩components'(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components'(m1)∩components'(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="¬Mdl=Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Mdl≠Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components'(m1)∩components'(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬m1=m2">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬m1=m2⇒components'(m1)∩components'(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/cont/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="type rewrites" org.eventb.core.prGoal="p1" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p2" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p3"/>
<org.eventb.core.prRule name="r0" 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="REWRITE0" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5,p6"/>
</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="components'" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container'" org.eventb.core.type="ℙ(ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="∃m⦂Model·m∈Model∧components'(m) ⇸ components'(m)=container'"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="∀m⦂Model·⊤⇒m∈dom(components')∧components'∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·m∈dom(components')"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="container'∈{m⦂Model·m∈Model ∣ components'(m) ⇸ components'(m)}"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="∀m⦂Model·m∈Model⇒m∈dom(components')∧components'∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∃m⦂Model·⊤∧components'(m) ⇸ components'(m)=container'"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="components'∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∃m⦂Model·components'(m) ⇸ components'(m)=container'"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="cont_ctr/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p7">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p4"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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="p8"/>
<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 name="'" org.eventb.core.prGoal="p9">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p9" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p10">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p12" 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.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p14">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p12" 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.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="*" org.eventb.core.prGoal="p16">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p2"/>
</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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="m∈dom(components)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="m∈Model">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·m∈dom(container)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧m∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="(∀m⦂Model·m∈dom(container))∧container∈Model ⇸ ℙ(Component × Component)∧(∀m⦂Model·m∈dom(components))∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="m∈dom(container)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·m∈dom(components)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/cont_ty/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prHyps="">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p0" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p1"/>
<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="p2"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p3"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈Model">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈Model">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="¬Mdl=Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Mdl≠Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/cont_ctr/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<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="p3"/>
<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 (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p5">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</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="components'" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container'" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Mdl∈Model">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Model">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="container'(m)∈components'(m) ⇸ components'(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="¬Mdl=Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Mdl≠Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·container'(m)∈components'(m) ⇸ components'(m)"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="cm_ctr/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p4"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p8">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p8" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="p9">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p9">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p9" org.eventb.core.prHyps="p9"/>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1"/>
<org.eventb.core.prExprRef name=".subst" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p12" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p14">
<org.eventb.core.prRule name="r1" 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="p15">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p15" 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="e1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="*" org.eventb.core.prGoal="p16">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p2"/>
</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.prRule>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="m∈dom(components)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="m∈Model">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="m∈Pattern">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="m∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧m∈dom(components)∧components∈Model ⇸ ℙ(Component)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="m∈dom(c_multiplicity)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒m∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧m∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="m∈Pattern⇒m∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧m∈dom(components)∧components∈Model ⇸ ℙ(Component)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Pattern"/>
<org.eventb.core.prExpr name="e1" org.eventb.core.expression="Model"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/cm/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prHyps="">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p0" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p1"/>
<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="p2"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p3"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈Model">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈Model">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="¬Mdl=Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Mdl≠Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/cm_ctr/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<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="p3"/>
<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 (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p5">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</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="c_multiplicity'" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components'" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Mdl∈Model">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Model">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·c_multiplicity'(m)∈components'(m) ⇸ ℕ1"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c_multiplicity'(m)∈components'(m) ⇸ ℕ1">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="¬Mdl=Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Mdl≠Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="acycl/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="f,m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p7">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p4"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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="p8"/>
<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 name="'" org.eventb.core.prGoal="p9">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p9" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p10">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p12" 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.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="p2"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p14">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m,f)" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="p16">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p12" 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="p19">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p19" 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.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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model,f⦂ℙ(Component×Component)·m∈dom(components)∧components∈Model ⇸ ℙ(Component)∧(f∈components(m) ↔ components(m)⇒m∈dom(container)∧container∈Model ⇸ ℙ(Component × Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="m∈dom(components)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="f∈components(m) ↔ components(m)⇒m∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="m∈Model">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="m∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="(∀m⦂Model·m∈dom(components))∧components∈Model ⇸ ℙ(Component)∧(∀m⦂Model,f⦂ℙ(Component×Component)·f∈components(m) ↔ components(m)⇒m∈dom(container)∧container∈Model ⇸ ℙ(Component × Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="m∈dom(container)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·m∈dom(components)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model,f⦂ℙ(Component×Component)·f∈components(m) ↔ components(m)⇒m∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="f∈components(m) ↔ components(m)">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<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="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="to_unfold_c/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p8">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p8" 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="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pat∈dom(components)"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/ic/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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,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="p9">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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="p10"/>
<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="p9" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p12" 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.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤∧⊤∧Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Mdl∈Model"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)∧Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<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.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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/icr/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p9">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8"/>
<org.eventb.core.prRule name="r2" 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.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Mdl∈dom(components)∧components∈Model ⇸ ℙ(Component)∧Pat∈dom(components)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(components)"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/mult/WD" org.eventb.core.confidence="0" org.eventb.core.prFresh="pc" 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="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="p8,p15">
<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="simplification rewrites" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p21">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p12" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p19"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p14" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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="p22"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees pc)" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p24">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p25">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p27">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p27" org.eventb.core.prHyps="p9">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="p6"/>
</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="p28">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="p9"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p29">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p6,p2,p7,p10,p4,p9,p11,p3,p15,p8,p5,p16,p13,p17,p1,p19,p20,p25">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="*" org.eventb.core.prGoal="p30">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional image goal for c_multiplicity(Pat)" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p9">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p31">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p31"/>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="+" org.eventb.core.prGoal="p32"/>
</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.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="inst_components∼∈components(Mdl) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∀pc⦂Component·⊤∧⊤∧(pc∈components(Pat)⇒Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧pc∈dom(c_multiplicity(Pat))∧c_multiplicity(Pat)∈Component ⇸ ℤ∧finite(inst_components[{pc}]))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="pc∈components(Pat)">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="∀pc⦂Component·pc∈components(Pat)⇒Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧pc∈dom(c_multiplicity(Pat))∧c_multiplicity(Pat)∈Component ⇸ ℤ∧finite(inst_components[{pc}])"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="finite(inst_components[{pc}])">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧pc∈dom(c_multiplicity(Pat))∧c_multiplicity(Pat)∈Component ⇸ ℤ∧finite(inst_components[{pc}])">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="¬Mdl=Pat"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="pc∈components(Pat)⇒Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧pc∈dom(c_multiplicity(Pat))∧c_multiplicity(Pat)∈Component ⇸ ℤ∧finite(inst_components[{pc}])">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℕ1"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="pc∈dom(c_multiplicity(Pat))">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Mdl∈Model"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ1"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀pc⦂Component·Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)∧(pc∈components(Pat)⇒Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧pc∈dom(c_multiplicity(Pat))∧c_multiplicity(Pat)∈Component ⇸ ℤ∧finite(inst_components[{pc}]))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Mdl≠Pat"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="inst_components∈components(Pat) ↔ components(Mdl)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Pattern"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="org.eventb.core.seqprover.funImgGoal"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/to_unfold_c/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p21" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p37"/>
<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="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="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p33,p10,p36,p5,p8,p12,p3,p34,p20,p28,p4,p29,p17,p19,p9,p25,p6,p35,p1,p22,p15,p14,p7,p18,p27,p2,p30,p26,p11,p32,p16,p13,p24,p23,p31,p37">
<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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_mult" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_mult_others" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="containers" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="container⊆containers"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(to_unfold_c_in)⇒c_multiplicity(c)&gt;0"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀s⦂Component,c⦂Component·s ↦ c∈container⇒containers∼[{s}]⊂containers∼[{c}]"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="inst_components∼∈components[{Mdl}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="inst_components∈components[{Pat}] ↔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="containers∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="ran(to_unfold_c_in)⊆dom(inst2pat_c)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c_mult=c_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="c_mult_others∈components[{Pat}] ∖ dom(inst_components) → ℕ"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="(inst2pat_c;to_unfold_c_in)∩container=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="containers∈Component ↔ Component"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="components[{Pat}] ∖ dom(container)⊆({Inst} ⩤ components)[{Pat}]"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="∀c⦂Component·finite(containers∼[{c}])"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="containers;containers⊆containers"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="∀c⦂Component·finite(to_unfold_c_in[{c}])"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="∀pc⦂Component·pc∈dom(inst_components)⇒finite(inst_components[{pc}])"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="∀c⦂Component·finite(container∼[{c}])"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="components∈Model ↔ Component"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/to_unfold_c/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p2,p3,p4,p6,p7,p8,p9,p24,p10,p11,p12,p13,p14,p15,p16,p17,p19,p20,p21,p22,p23"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p18,p1,p5,p2,p3,p4,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p19,p20,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_mult_others" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="inst_components∼∈components(Mdl) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)∧Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c_mult_others∈components(Pat) ∖ dom(inst_components) → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="inst_components∈components(Pat) ↔ components(Mdl)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/new_c_ty/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p4,p5,p6,p7,p8,p21,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p1,p2,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧c∈dom(c_multiplicity(Pat))∧c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/to_unfold_c/INV" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p2,p1,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Z3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="Z3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_c ∖ {c}⊆(components{Pat ↦ components(Pat)∪ran(new_c)})(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components{Pat ↦ components(Pat)∪ran(new_c)})"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_free_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(c_multiplicity)">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="components{Pat ↦ components(Pat)∪ran(new_c)}∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/p_WD/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p20,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" 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.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/ic/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="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="p9">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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="p10"/>
<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="p9" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p12" 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.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Inst∈dom(components)∧components∈Model ⇸ ℙ(Component)∧Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤∧⊤∧Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Mdl∈Model"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst∈dom(components)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<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.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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/icr/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p9">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8"/>
<org.eventb.core.prRule name="r2" 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.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Mdl=Pat"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Mdl≠Pat"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Mdl∈dom(components)∧components∈Model ⇸ ℙ(Component)∧Pat∈dom(components)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/ps1/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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,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="p9">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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="p10"/>
<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="p9" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p12" 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.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Inst∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧Mdl∈dom(container)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤∧⊤∧Mdl∈dom(container)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Mdl∈Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Inst∈dom(container)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Mdl∈dom(container)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<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.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/ps2/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p9">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8"/>
<org.eventb.core.prRule name="r2" 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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst∈dom(container)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Mdl∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧Inst∈dom(container)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈dom(container)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/nc/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p8">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p8" 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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Inst∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst∈dom(components)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/comp/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" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<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="p11"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p13,p14,p15,p16,p17"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p6"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p16"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p5,p1,p2,p3,p4,p6">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="(container(Inst))[dom(inst_components)]⊆dom(inst_components)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="inst_components∼;container(Pat);inst_components⊆container(Mdl)">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="(container(Mdl))∼;inst_components∼;container(Pat)⊆inst_components∼">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="new_components∈components(Pat) ∖ dom(inst_components) ↣ Component ∖ union(ran(components))">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="¬Mdl=Pat">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="components{Mdl ↦ components(Mdl)∪ran(new_components)}∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Mdl∈Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="new_components∈components(Inst) ∖ dom(inst_components) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="dom(inst_components) ◁ container(Inst);inst_components⊆inst_components;container(Mdl)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="inst_components∈components(Inst) ⤔ components(Mdl)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="inst_components∈components(Pat) ⤔ components(Mdl)">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Mdl≠Pat">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="(c_multiplicity(Pat))[components(Pat)]⊆{1}">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/cm_ctr/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p22" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p40"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p35" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p41"/>
<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="p42"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p43">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="p44">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="p46">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Mdl" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="p46">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p49">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p44" org.eventb.core.prInfHyps="p48"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p44"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="p30,p8,p33,p5,p11,p26,p14,p36,p31,p21,p24,p15,p37,p12,p9,p16,p38,p27,p17,p1,p39,p34,p25,p7,p18,p2,p6,p23,p13,p10,p4,p32,p20,p28,p29,p19,p3,p40,p41,p44,p46,p48">
<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="p51" org.eventb.core.prHyps="p50">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p51" org.eventb.core.prHyps="p5">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p52">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p52" org.eventb.core.prHyps="p24,p32,p28,p29,p3,p44,p50">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container(Pat)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="(container(Inst))[dom(inst_components)]⊆dom(inst_components)"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_clone_c∈components(Inst) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_clone_c⊆inst2pat_c"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Mdl∈dom(container)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="c_multiplicity(m)∈(components{Mdl ↦ components(Mdl)∪ran(new_components)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="m∈Pattern">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="inst2pat_c;container(Pat)=container(Inst);inst2pat_c"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="inst2pat_c∈components(Inst) → components(Pat)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="dom(inst_components) ◁ container(Inst);inst_components⊆inst_components;container(Mdl)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="∀m⦂Model·container(m)∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="inst_components∈components(Inst) ⤔ components(Mdl)"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈(components{Mdl ↦ components(Mdl)∪ran(new_components)})(m) → ℕ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="to_unfold_c∩dom(container(Pat))=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="¬m=Mdl">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Inst∈dom(components)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Inst∈dom(container)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c_in∈components(Pat) ↔ components(Inst)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container(Pat))"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p51" org.eventb.core.predicate="c_multiplicity(m)∈({Mdl} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p52" org.eventb.core.predicate="c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="c_multiplicity(Mdl)∈components(Mdl)∪ran(new_components) → ℕ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="Mdl∈Pattern"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="new_components∈components(Inst) ∖ dom(inst_components) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="m=Mdl">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="m∈Pattern⇒c_multiplicity(m)∈(components{Mdl ↦ components(Mdl)∪ran(new_components)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="c_multiplicity(m)∈components(Mdl)∪ran(new_components) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·f∈components(m) ↔ components(m)∧container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r6" 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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/comp_disj/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p2,p28,p10,p30,p19,p31,p7,p4,p20,p6,p18,p13,p24,p22,p8,p29,p14,p1,p23,p16,p15,p3,p5,p25,p11,p26"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p9,p27,p21,p12,p17,p2,p28,p10,p30,p19,p31,p7,p4,p20,p6,p18,p13,p24,p22,p8,p29,p14,p1,p23,p16,p15,p3,p5,p25,p11,p26">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(components∪({Mdl} × ran(new_components)))∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="dom(inst_components) ◁ container;inst_components⊆inst_components;container"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="to_clone_c⊆inst2pat_c"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="container[dom(inst_components)]⊆dom(inst_components)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="new_components∈components[{Inst}] ∖ dom(inst_components) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="inst_components∈components[{Inst}] ⤔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/cont_ty/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p11,p12,p13,p14,p15,p16,p17,p10,p18,p3,p19,p20,p21,p22,p23,p24,p5,p25,p26,p27,p1,p28,p29,p9,p30,p31"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Z3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="Z3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container">
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="dom(inst_components) ◁ container;inst_components⊆inst_components;container"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_clone_c⊆inst2pat_c">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)">
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="container[dom(inst_components)]⊆dom(inst_components)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="new_components∈components[{Inst}] ∖ dom(inst_components) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="container∪((inst_components∪new_components)∼;container;(inst_components∪new_components))∈ran(components∪({Mdl} × ran(new_components))) ⇸ ran(components∪({Mdl} × ran(new_components)))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]">
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="inst_components∈components[{Inst}] ⤔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Inst∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/cont_ctr/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p4,p28,p29,p5,p6,p7,p8,p9,p11,p30,p12,p13,p15,p17,p31,p19,p20,p21,p22,p24,p25,p26,p27"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" 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.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="dom(inst_components) ◁ container;inst_components⊆inst_components;container"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="to_clone_c⊆inst2pat_c">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="container[dom(inst_components)]⊆dom(inst_components)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="new_components∈components[{Inst}] ∖ dom(inst_components) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="inst_components∈components[{Inst}] ⤔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(components∪({Mdl} × ran(new_components)));(container∪((inst_components∪new_components)∼;container;(inst_components∪new_components)));(components∪({Mdl} × ran(new_components)))∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/acycl/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p4"/>
<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="p5"/>
<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="p6">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p10">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p7"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∃ hyp (∃f·container⊆f∧f;f⊆f∧id∩f=∅)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p13,p14,p15">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prHypAction>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p13,p14,p15"/>
<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="REWRITE0" org.eventb.core.prHidden="p16" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p17"/>
</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.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container∪((inst_components∪new_components)∼;container;(inst_components∪new_components))⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀c⦂Component·¬c∈dom(container)∧¬c∈to_unfold_c⇒todo(c)=0">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="todo" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧(inst_components∪new_components)∼;container;(inst_components∪new_components)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧(inst_components∪new_components)∼;container;(inst_components∪new_components)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="f;f⊆f">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀c⦂Component·c∉dom(container)∧c∉to_unfold_c⇒todo(c)=0">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="todo" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container⊆f">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧(inst_components∪new_components)∼;container;(inst_components∪new_components)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model ↔ Component">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.exF"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/m/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p8">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p8" 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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Mdl∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈dom(components)"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/f/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p9">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8"/>
<org.eventb.core.prRule name="r2" 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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst∈dom(container)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Mdl∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧Inst∈dom(container)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈dom(container)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="to_clone_c/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p9">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8"/>
<org.eventb.core.prRule name="r2" 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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst∈dom(components)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Inst∈dom(components)∧components∈Model ⇸ ℙ(Component)∧Pat∈dom(components)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="to_free_c/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p13,p9,p17,p11"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p10,p15,p8,p12,p7,p2,p5,p16,p4,p14,p6,p1,p13,p9,p17,p11">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/to_clone_c/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<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="p8"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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="REWRITE0" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p12"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p4,p5,p2,p1">
<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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="container[dom(inst_components)]⊆dom(inst_components)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="new_components∈components[{Inst}] ∖ dom(inst_components) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="dom(inst_components) ◁ container;inst_components⊆inst_components;container"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="inst_components∈components[{Inst}] ⤔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_clone_c∈(components∪({Mdl} × ran(new_components)))[{Inst}] ⇸ (components∪({Mdl} × ran(new_components)))[{Pat}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/to_free_c/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p2,p3,p4,p5,p6,p7,p9,p10,p12,p14,p16,p17,p18,p19,p33,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p20,p11,p8,p1,p13,p15,p2,p3,p4,p5,p6,p7,p9,p10,p12,p14,p16,p17,p18,p19,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="inst_components∼;container(Pat);inst_components⊆container(Mdl)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="inst_components∈components(Pat) ⤔ components(Mdl)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_free_c⊆(components{Mdl ↦ components(Mdl)∪ran(new_components)})(Pat)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="components{Mdl ↦ components(Mdl)∪ran(new_components)}∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Mdl∈dom(container)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="(c_multiplicity(Pat))[components(Pat)]⊆{1}"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="(container(Mdl))∼;inst_components∼;container(Pat)⊆inst_components∼"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="new_components∈components(Pat) ∖ dom(inst_components) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components{Mdl ↦ components(Mdl)∪ran(new_components)})"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/to_clone_c/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p29">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p25" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p28"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p4,p5,p6,p7,p8,p9,p28,p10,p13,p14,p15,p16,p30,p17,p18,p19,p20,p21,p22,p23,p24,p26,p27"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p12,p11,p3,p1,p2,p4,p5,p6,p7,p8,p9,p28,p10,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p26,p27">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_clone_c∪(ran(new_c) × {c})∈(components{Pat ↦ components(Pat)∪ran(new_c)})(Pat) ⇸ (components{Pat ↦ components(Pat)∪ran(new_c)})(Pat)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Pat∈dom(components{Pat ↦ components(Pat)∪ran(new_c)})"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="to_clone_c∪(ran(new_c) × {c})∈components(Pat)∪ran(new_c) ⇸ components(Pat)∪ran(new_c)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="components{Pat ↦ components(Pat)∪ran(new_c)}∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/cloned_c_ty/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p17,p11,p3,p13,p19,p12,p16,p9,p2,p5,p20,p21,p14,p4,p18,p6,p10,p7,p8"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p15,p1,p17,p11,p3,p13,p19,p12,p16,p9,p2,p5,p20,p21,p14,p4,p18,p6,p10,p7,p8">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧c∈dom(to_clone_c)∧to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/comp/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p21" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p25"/>
<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="p26"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p18,p12,p14,p13,p17,p10,p2,p5,p22,p23,p15,p4,p19,p6,p11,p7,p8,p24,p20,p1,p25"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p16,p9,p18,p12,p14,p13,p17,p10,p2,p5,p22,p23,p15,p4,p19,p6,p11,p7,p8,p24,p20,p1,p25">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="components{Pat ↦ components(Pat)∪ran(cloned_c)}∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/cm_ctr/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p20" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p24"/>
<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="p25"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p29">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p31" org.eventb.core.prHyps="p29">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p24,p2,p3,p4,p6,p7,p32,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p21,p22,p23"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p31" org.eventb.core.prHyps="p5,p16,p8,p27,p29,p1,p24,p2,p3,p4,p6,p7,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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.prHyps="p33">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p35">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p24,p2,p3,p4,p6,p7,p32,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p21,p22,p23"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p5,p16,p8,p27,p29,p33,p1,p24,p2,p3,p4,p6,p7,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p33">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p37" org.eventb.core.prHyps="p29">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p37" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p38">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p24,p2,p3,p4,p6,p7,p32,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p21,p22,p23"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p38" org.eventb.core.prHyps="p5,p16,p8,p27,p33,p29,p1,p24,p2,p3,p4,p6,p7,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p39" org.eventb.core.prHyps="p33">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p39" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p40">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p40" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p41">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p24,p2,p3,p4,p6,p7,p32,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p21,p22,p23"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p41" org.eventb.core.prHyps="p5,p16,p8,p27,p33,p1,p24,p2,p3,p4,p6,p7,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))∈({Pat} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒(c_multiplicity{Pat ↦ c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))})(m)∈(components{Pat ↦ components(Pat)∪ran(cloned_c)})(m) → ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="c_multiplicity(m)∈components(Pat)∪ran(cloned_c) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="c_multiplicity(m)∈({Pat} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="m∈Pattern">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="(c_multiplicity{Pat ↦ c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))})(m)∈(components{Pat ↦ components(Pat)∪ran(cloned_c)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))∈components(Pat)∪ran(cloned_c) → ℕ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="m∈Pattern⇒(c_multiplicity{Pat ↦ c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))})(m)∈(components{Pat ↦ components(Pat)∪ran(cloned_c)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="({Pat} ⩤ c_multiplicity)(m)∈components(Pat)∪ran(cloned_c) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="({Pat} ⩤ c_multiplicity)(m)∈({Pat} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))∈components(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="({Pat} ⩤ c_multiplicity)(m)∈(components{Pat ↦ components(Pat)∪ran(cloned_c)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="¬m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))∈(components{Pat ↦ components(Pat)∪ran(cloned_c)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/comp_disj/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p25,p10,p11,p12,p13,p14,p15,p17,p18,p19,p21,p22,p23,p24"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p20,p16,p9,p1,p2,p3,p4,p5,p6,p7,p8,p10,p11,p12,p13,p14,p15,p17,p18,p19,p21,p22,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒(components{Pat ↦ components(Pat)∪ran(cloned_c)})(m1)∩(components{Pat ↦ components(Pat)∪ran(cloned_c)})(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/cont_ty/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="ae" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<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="p10"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p3"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Pat)" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p12">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p3"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (container(Pat)∪(ran(cloned_c) × {c})∈Component ⇸ Component)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="p5,p6">
<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="simplification rewrites" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p6,p5">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p1,p2,p7,p12,p4,p6,p5">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p6,p5,p15">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ae (container(Pat)∪(ran(cloned_c) × {c}))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="p5,p6">
<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="simplification rewrites" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p6,p5,p16">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he with ae=container(Pat)∪(ran(cloned_c) × {c})" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p16">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18">
<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.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p16"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC4" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p1,p17">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC4"/>
</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.prExprRef name=".expr" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p15"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e1"/>
</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="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="ae∈Component ⇸ Component">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="ae=container(Pat)∪(ran(cloned_c) × {c})">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="container{Pat ↦ container(Pat)∪(ran(cloned_c) × {c})}∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container(Pat)∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="container(Pat)∪(ran(cloned_c) × {c})∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container{Pat ↦ ae}∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prExpr name="e1" org.eventb.core.expression="Pat"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="container(Pat)∪(ran(cloned_c) × {c})"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allD"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.he:1"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.ae"/>
<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="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.cut"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/cont_ctr/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p20" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p24"/>
<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="p25"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p24,p2,p3,p4,p5,p6,p7,p31,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p15,p16,p8,p27,p1,p24,p2,p3,p4,p5,p6,p7,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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.prHyps="p32">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p24,p2,p3,p4,p5,p6,p7,p31,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="p15,p16,p8,p27,p32,p1,p24,p2,p3,p4,p5,p6,p7,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p32">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p37">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p24,p2,p3,p4,p5,p6,p7,p31,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p37" org.eventb.core.prHyps="p15,p16,p8,p27,p32,p1,p24,p2,p3,p4,p5,p6,p7,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p38" org.eventb.core.prHyps="p32">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p38" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p39">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p39" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p40">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p24,p2,p3,p4,p5,p6,p7,p31,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p40" org.eventb.core.prHyps="p15,p16,p8,p27,p32,p1,p24,p2,p3,p4,p5,p6,p7,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p41" org.eventb.core.prHyps="p32">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p41" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p42" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p42" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="p12">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p44">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p24,p2,p3,p4,p5,p6,p7,p31,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p44" org.eventb.core.prHyps="p15,p16,p8,p32,p27,p1,p24,p2,p3,p4,p5,p6,p7,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="p32">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="p12">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p46">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p46" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p24,p2,p3,p4,p5,p6,p7,p31,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="p15,p16,p8,p32,p27,p1,p24,p2,p3,p4,p5,p6,p7,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p48" org.eventb.core.prHyps="p32">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p48" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="p12">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p50">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p50" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p51">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p24,p2,p3,p4,p5,p6,p7,p31,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p51" org.eventb.core.prHyps="p15,p16,p8,p32,p27,p1,p24,p2,p3,p4,p5,p6,p7,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p52" org.eventb.core.prHyps="p32">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p52" org.eventb.core.prHyps="p12">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p53">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p53" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p54">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p54" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p55">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p24,p2,p3,p4,p5,p6,p7,p31,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p55" org.eventb.core.prHyps="p15,p16,p8,p32,p1,p24,p2,p3,p4,p5,p6,p7,p9,p10,p11,p12,p13,p14,p17,p18,p19,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="container(Pat)∪(ran(cloned_c) × {c})∈components(Pat)∪ran(cloned_c) ⇸ (components{Pat ↦ components(Pat)∪ran(cloned_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="container(Pat)∪(ran(cloned_c) × {c})∈({Pat} ⩤ components)(m) ⇸ components(Pat)∪ran(cloned_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="container(Pat)∪(ran(cloned_c) × {c})∈(components{Pat ↦ components(Pat)∪ran(cloned_c)})(m) ⇸ (components{Pat ↦ components(Pat)∪ran(cloned_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈components(Pat)∪ran(cloned_c) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p54" org.eventb.core.predicate="container(m)∈components(m) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="container(Pat)∪(ran(cloned_c) × {c})∈components(Pat)∪ran(cloned_c) ⇸ components(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="container(Pat)∪(ran(cloned_c) × {c})∈({Pat} ⩤ components)(m) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="container(m)∈components(Pat)∪ran(cloned_c) ⇸ components(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·(container{Pat ↦ container(Pat)∪(ran(cloned_c) × {c})})(m)∈(components{Pat ↦ components(Pat)∪ran(cloned_c)})(m) ⇸ (components{Pat ↦ components(Pat)∪ran(cloned_c)})(m)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="container(Pat)∪(ran(cloned_c) × {c})∈components(Pat)∪ran(cloned_c) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="container(Pat)∪(ran(cloned_c) × {c})∈components(m) ⇸ components(Pat)∪ran(cloned_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="container(m)∈components(Pat)∪ran(cloned_c) ⇸ components(Pat)∪ran(cloned_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p52" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈({Pat} ⩤ components)(m) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈components(Pat)∪ran(cloned_c) ⇸ components(Pat)∪ran(cloned_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="container(m)∈({Pat} ⩤ components)(m) ⇸ components(Pat)∪ran(cloned_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="container(Pat)∪(ran(cloned_c) × {c})∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="container(Pat)∪(ran(cloned_c) × {c})∈({Pat} ⩤ components)(m) ⇸ (components{Pat ↦ components(Pat)∪ran(cloned_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="container(Pat)∪(ran(cloned_c) × {c})∈components(Pat)∪ran(cloned_c) ⇸ components(Pat)∪ran(cloned_c)"/>
<org.eventb.core.prPred name="p53" org.eventb.core.predicate="container(m)∈({Pat} ⩤ components)(m) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈components(Pat)∪ran(cloned_c) ⇸ (components{Pat ↦ components(Pat)∪ran(cloned_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="container(m)∈components(Pat)∪ran(cloned_c) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈({Pat} ⩤ components)(m) ⇸ components(Pat)∪ran(cloned_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p55" org.eventb.core.predicate="container(m)∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈(components{Pat ↦ components(Pat)∪ran(cloned_c)})(m) ⇸ (components{Pat ↦ components(Pat)∪ran(cloned_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p51" org.eventb.core.predicate="container(m)∈components(m) ⇸ components(Pat)∪ran(cloned_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="(container{Pat ↦ container(Pat)∪(ran(cloned_c) × {c})})(m)∈(components{Pat ↦ components(Pat)∪ran(cloned_c)})(m) ⇸ (components{Pat ↦ components(Pat)∪ran(cloned_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="container(Pat)∪(ran(cloned_c) × {c})∈components(m) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈({Pat} ⩤ components)(m) ⇸ (components{Pat ↦ components(Pat)∪ran(cloned_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="¬m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/acycl/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<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="p3"/>
<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 (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p5">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</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="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="instanciation_started∈BOOL">
<org.eventb.core.prIdent name="instanciation_started" org.eventb.core.type="BOOL"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·(container{Pat ↦ container(Pat)∪(ran(cloned_c) × {c})})(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·(container{Pat ↦ container(Pat)∪(ran(cloned_c) × {c})})(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/to_clone_c/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p4"/>
<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="p5"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8"/>
<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="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p1">
<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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="{c} ⩤ to_clone_c∈components[{Inst}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/to_free_c/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p28">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p23" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p27"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p8,p27,p9,p10,p2,p11,p12,p13,p14,p29,p16,p4,p17,p18,p5,p6,p7,p20,p21,p22,p24,p25,p26"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="p15,p19,p3,p1,p8,p27,p9,p10,p2,p11,p12,p13,p14,p16,p4,p17,p18,p5,p6,p7,p20,p21,p22,p24,p25,p26">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_free_c⊆(components{Pat ↦ components(Pat)∪ran(cloned_c)})(Pat)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="to_free_c⊆components(Pat)∪ran(cloned_c)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈dom(components{Pat ↦ components(Pat)∪ran(cloned_c)})"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="components{Pat ↦ components(Pat)∪ran(cloned_c)}∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/container/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p25,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21,p22,p23,p24"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p16,p9,p1,p2,p3,p4,p5,p6,p7,p8,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21,p22,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/pc/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p25,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21,p22,p23,p24"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p16,p9,p1,p2,p3,p4,p5,p6,p7,p8,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21,p22,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/comp/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p18" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p16,p10,p2,p12,p11,p14,p8,p1,p5,p19,p20,p13,p4,p17,p6,p9,p7,p15,p21,p22">
<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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="¬c∈to_unfold_c"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="components{Pat ↦ components(Pat) ∖ {c}}∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(components)"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/cm_ctr/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p18" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p24">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p25">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p21,p1,p2,p4,p6,p7,p30,p8,p9,p10,p11,p12,p13,p14,p16,p17,p19,p20"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p5,p15,p22,p25,p27,p21,p1,p2,p4,p6,p7,p8,p9,p10,p11,p12,p13,p14,p16,p17,p19,p20">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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.prHyps="p31">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p33">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p21,p1,p2,p4,p6,p7,p30,p8,p9,p10,p11,p12,p13,p14,p16,p17,p19,p20"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p5,p15,p22,p25,p27,p31,p21,p1,p2,p4,p6,p7,p8,p9,p10,p11,p12,p13,p14,p16,p17,p19,p20">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="p31">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p36">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p21,p1,p2,p4,p6,p7,p30,p8,p9,p10,p11,p12,p13,p14,p16,p17,p19,p20"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p5,p15,p22,p25,p31,p27,p21,p1,p2,p4,p6,p7,p8,p9,p10,p11,p12,p13,p14,p16,p17,p19,p20">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p37" org.eventb.core.prHyps="p31">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p37" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p38">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p38" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p39">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p21,p1,p2,p4,p6,p7,p30,p8,p9,p10,p11,p12,p13,p14,p16,p17,p19,p20"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p39" org.eventb.core.prHyps="p5,p15,p22,p25,p31,p21,p1,p2,p4,p6,p7,p8,p9,p10,p11,p12,p13,p14,p16,p17,p19,p20">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒(c_multiplicity{Pat ↦ {c} ⩤ c_multiplicity(Pat)})(m)∈(components{Pat ↦ components(Pat) ∖ {c}})(m) → ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="(c_multiplicity{Pat ↦ {c} ⩤ c_multiplicity(Pat)})(m)∈(components{Pat ↦ components(Pat) ∖ {c}})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="¬c∈to_unfold_c"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="m∈Pattern⇒(c_multiplicity{Pat ↦ {c} ⩤ c_multiplicity(Pat)})(m)∈(components{Pat ↦ components(Pat) ∖ {c}})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="c_multiplicity(m)∈components(Pat) ∖ {c} → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="c_multiplicity(m)∈({Pat} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="m∈Pattern">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="{c} ⩤ c_multiplicity(Pat)∈components(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="{c} ⩤ c_multiplicity(Pat)∈(components{Pat ↦ components(Pat) ∖ {c}})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="{c} ⩤ c_multiplicity(Pat)∈components(Pat) ∖ {c} → ℕ"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="{c} ⩤ c_multiplicity(Pat)∈({Pat} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="({Pat} ⩤ c_multiplicity)(m)∈components(Pat) ∖ {c} → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="({Pat} ⩤ c_multiplicity)(m)∈({Pat} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="({Pat} ⩤ c_multiplicity)(m)∈(components{Pat ↦ components(Pat) ∖ {c}})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="¬m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/comp_disj/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p4,p5,p6,p7,p8,p22,p9,p10,p11,p12,p13,p14,p15,p17,p18,p20,p21"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p19,p16,p3,p1,p2,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p17,p18,p20,p21">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒(components{Pat ↦ components(Pat) ∖ {c}})(m1)∩(components{Pat ↦ components(Pat) ∖ {c}})(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/cont_ty/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p4,p5,p6,p7,p8,p24,p9,p10,p12,p13,p14,p15,p17,p18,p19,p20,p21,p22,p23"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p11,p16,p3,p1,p2,p4,p5,p6,p7,p8,p9,p10,p12,p13,p14,p15,p17,p18,p19,p20,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="container{Pat ↦ {c} ⩤ container(Pat)}∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/cont_ctr/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m" 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="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p22">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Pat)" org.eventb.core.prHyps="p15">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p23">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p23" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p24">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p22" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p25">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="lae in goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p25">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p27">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="lae in goal" org.eventb.core.prGoal="p27" org.eventb.core.prHyps="p25">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p28">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p29">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p32">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p19" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p31"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prRule name="r6" 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="p1"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p17,p11,p3,p13,p12,p15,p9,p2,p5,p20,p21,p14,p4,p18,p6,p10,p7,p8,p31"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (c∉ran({c} ⩤ container(Pat)))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p33">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p16,p24,p25,p17,p11,p3,p13,p12,p15,p9,p2,p5,p20,p21,p14,p4,p18,p6,p10,p7,p8,p31">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p34,p35">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p37"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p34,p35,p36">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p16,p24,p25,p17,p11,p3,p13,p12,p15,p9,p2,p5,p20,p21,p14,p4,p18,p6,p10,p7,p8,p31,p34,p35,p36">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p36"/>
</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="p39" org.eventb.core.prHyps="p38">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p39" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p41">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p19" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p31"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p38" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p40"/>
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p40"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="p42">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p17,p11,p3,p13,p19,p12,p15,p9,p2,p5,p20,p21,p14,p4,p18,p6,p10,p7,p8"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="p16,p24,p42,p1,p17,p11,p3,p13,p19,p12,p15,p9,p2,p5,p20,p21,p14,p4,p18,p6,p10,p7,p8">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="(container{Pat ↦ {c} ⩤ container(Pat)})(Pat)∈components(Pat) ∖ {c} ⇸ (components{Pat ↦ components(Pat) ∖ {c}})(Pat)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="Pat=Pat"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="¬c∈ran({c} ⩤ container(Pat))"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="c∉ran({c} ⩤ container(Pat))"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="(container{Pat ↦ {c} ⩤ container(Pat)})(Pat)∈components(Pat) ∖ {c} ⇸ ({Pat} ⩤ components)(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·(container{Pat ↦ {c} ⩤ container(Pat)})(m)∈(components{Pat ↦ components(Pat) ∖ {c}})(m) ⇸ (components{Pat ↦ components(Pat) ∖ {c}})(m)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="{c} ⩤ container(Pat)∈components(Pat) ∖ {c} ⇸ components(Pat) ∖ {c}"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="⊥"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="(container{Pat ↦ {c} ⩤ container(Pat)})(m)∈components(Pat) ∖ {c} ⇸ (components{Pat ↦ components(Pat) ∖ {c}})(Pat)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="¬Pat=Pat"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="container(Pat)∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="(container{Pat ↦ {c} ⩤ container(Pat)})(m)∈components(Pat) ∖ {c} ⇸ (components{Pat ↦ components(Pat) ∖ {c}})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="(container{Pat ↦ {c} ⩤ container(Pat)})(m)∈({Pat} ⩤ components)(m) ⇸ (components{Pat ↦ components(Pat) ∖ {c}})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="(container{Pat ↦ {c} ⩤ container(Pat)})(m)∈(components{Pat ↦ components(Pat) ∖ {c}})(m) ⇸ (components{Pat ↦ components(Pat) ∖ {c}})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="{c} ⩤ container(Pat)∈components(Pat) ∖ {c} ⇸ ({Pat} ⩤ components)(Pat)"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="¬m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="(container{Pat ↦ {c} ⩤ container(Pat)})(Pat)∈components(Pat) ∖ {c} ⇸ components(Pat) ∖ {c}"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Pat"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="org.eventb.core.seqprover.falseHyp"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.cut"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.allD"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.locEq"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/acycl/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p18,p12,p4,p14,p20,p13,p16,p2,p6,p21,p22,p15,p5,p19,p7,p11,p8,p9"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p10,p17,p3,p1,p18,p12,p4,p14,p20,p13,p16,p2,p6,p21,p22,p15,p5,p19,p7,p11,p8,p9">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·(container{Pat ↦ {c} ⩤ container(Pat)})(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/to_clone_c/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p9,p10,p1,p11,p12,p13,p14,p15,p16,p17,p6,p18,p8,p2,p19,p20,p21,p7,p22,p23,p5"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Z3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="Z3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="components{Pat ↦ components(Pat) ∖ {c}}∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_clone_c∈(components{Pat ↦ components(Pat) ∖ {c}})(Pat) ⇸ (components{Pat ↦ components(Pat) ∖ {c}})(Pat)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(components{Pat ↦ components(Pat) ∖ {c}})"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_unfold_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/to_free_c/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p28">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p22" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p26"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p27"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p26,p9,p2,p11,p12,p13,p14,p15,p29,p3,p17,p4,p18,p5,p6,p7,p19,p20,p21,p23,p24,p25"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="p16,p8,p27,p1,p26,p9,p2,p11,p12,p13,p14,p15,p3,p17,p4,p18,p5,p6,p7,p19,p20,p21,p23,p24,p25">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(components{Pat ↦ components(Pat) ∖ {c}})"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="¬c∈to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(to_free_c ∖ {c})∪(container(Pat))∼[{c}]⊆(components{Pat ↦ components(Pat) ∖ {c}})(Pat)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="to_free_c ∖ {c}⊆components(Pat) ∖ {c}∧(container(Pat))∼[{c}]⊆components(Pat) ∖ {c}"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="components{Pat ↦ components(Pat) ∖ {c}}∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/p/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p4,p5,p6,p7,p8,p22,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p16,p3,p1,p2,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/m/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p4,p5,p6,p7,p8,p22,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p16,p3,p1,p2,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="VWD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="c" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p2" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p3"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/>
<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="p6"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p7"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<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="REWRITE0" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees c)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="p12">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p14">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p12" org.eventb.core.prHyps="p12"/>
</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="p15">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p15" 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.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="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="todo" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c∈components[{Pat}]">
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀c⦂Component·¬c∈dom(container)∧¬c∈to_unfold_c⇒todo(c)=0">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="todo∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="todo∈components[{Pat}] → ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀c⦂Component·c∉dom(container)∧c∉to_unfold_c⇒todo(c)=0">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c∈dom(todo)∧todo∈Component ⇸ ℤ">
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀c⦂Component·c∈components[{Pat}]⇒c∈dom(todo)∧todo∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c∈dom(todo)">
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c∈components[{Pat}]⇒c∈dom(todo)∧todo∈Component ⇸ ℤ">
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="components[{Pat}]"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="FIN" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p0" org.eventb.core.prSets="Component">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p0"/>
<org.eventb.core.prIdent name="todo" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="finite(todo)"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/comp/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p23" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p26"/>
<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="p27"/>
<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="p21,p3,p1,p5,p18,p7,p16,p8,p12,p24,p25,p6,p10,p22,p13,p17,p14,p15,p9,p2,p20,p19,p4,p11,p26">
<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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="components{Pat ↦ components(Pat)∪ran(new_c)}∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components)"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/cm/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="ae" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<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="p10"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Pat)" org.eventb.core.prHyps="p6">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p12">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p6"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p12" org.eventb.core.prHyps="p1" org.eventb.core.prInfHyps="p13"/>
<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="REWRITE0" org.eventb.core.prHidden="p13" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p14"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p7"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (ran(new_c) × {1}∈Component ∖ union(ran(components)) ⇸ ℕ)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p15">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p2,p3,p5,p14,p1,p7,p4">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R30000"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p15">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ae (ran(new_c) × {1})" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p16">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he with ae=ran(new_c) × {1}" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p16">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18">
<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.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p16"/>
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p2,p3,p5,p14,p1,p7,p4,p17">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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.prExprRef name=".expr" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p15"/>
</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.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e1"/>
</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="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="ran(new_c) × {1}∈Component ∖ union(ran(components)) ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="ae∈Component ∖ union(ran(components)) ⇸ ℕ">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_multiplicity{Pat ↦ c_multiplicity(Pat)∪ae}∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern⇒c_multiplicity(Pat)∈components(Pat) → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c_multiplicity(Pat)∈components(Pat) → ℕ"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c_multiplicity{Pat ↦ c_multiplicity(Pat)∪(ran(new_c) × {1})}∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="⊤⇒c_multiplicity(Pat)∈components(Pat) → ℕ"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="ae=ran(new_c) × {1}">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="ran(new_c) × {1}"/>
<org.eventb.core.prExpr name="e1" org.eventb.core.expression="Pat"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allD"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.he:1"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.ae"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.cut"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/cm_ctr/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p22" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p25"/>
<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="p26"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p27">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p27" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p28">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p31" org.eventb.core.prHyps="p30">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p31" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p30">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p25,p1,p3,p5,p4,p8,p9,p33,p10,p11,p12,p13,p15,p14,p16,p18,p17,p19,p20,p21,p24,p23"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Z3" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p12,p17,p2,p4,p7,p6,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="Z3"/>
</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.prHyps="p34">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p36">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p25,p1,p3,p5,p4,p8,p9,p33,p10,p11,p12,p13,p15,p14,p16,p18,p17,p19,p20,p21,p24,p23"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p7,p2,p6,p28,p30,p34,p25,p1,p3,p5,p4,p8,p9,p10,p11,p12,p13,p15,p14,p16,p18,p17,p19,p20,p21,p24,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p37" org.eventb.core.prHyps="p34">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p37" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p38" org.eventb.core.prHyps="p30">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p38" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p39">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p25,p1,p3,p5,p4,p8,p9,p33,p10,p11,p12,p13,p15,p14,p16,p18,p17,p19,p20,p21,p24,p23"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p39" org.eventb.core.prHyps="p7,p2,p6,p28,p34,p30,p25,p1,p3,p5,p4,p8,p9,p10,p11,p12,p13,p15,p14,p16,p18,p17,p19,p20,p21,p24,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p40" org.eventb.core.prHyps="p34">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p40" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p41">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p41" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p42">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p25,p1,p3,p5,p4,p8,p9,p33,p10,p11,p12,p13,p15,p14,p16,p18,p17,p19,p20,p21,p24,p23"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p42" org.eventb.core.prHyps="p7,p2,p6,p28,p34,p25,p1,p3,p5,p4,p8,p9,p10,p11,p12,p13,p15,p14,p16,p18,p17,p19,p20,p21,p24,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒(c_multiplicity{Pat ↦ c_multiplicity(Pat)∪(ran(new_c) × {1})})(m)∈(components{Pat ↦ components(Pat)∪ran(new_c)})(m) → ℕ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="({Pat} ⩤ c_multiplicity)(m)∈(components{Pat ↦ components(Pat)∪ran(new_c)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="c_multiplicity(Pat)∪(ran(new_c) × {1})∈components(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="({Pat} ⩤ c_multiplicity)(m)∈components(Pat)∪ran(new_c) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="m∈Pattern⇒(c_multiplicity{Pat ↦ c_multiplicity(Pat)∪(ran(new_c) × {1})})(m)∈(components{Pat ↦ components(Pat)∪ran(new_c)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="c_multiplicity(Pat)∪(ran(new_c) × {1})∈components(Pat)∪ran(new_c) → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="c_multiplicity(Pat)∪(ran(new_c) × {1})∈(components{Pat ↦ components(Pat)∪ran(new_c)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="c_multiplicity(Pat)∪(ran(new_c) × {1})∈({Pat} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="c_multiplicity(m)∈components(Pat)∪ran(new_c) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="(c_multiplicity{Pat ↦ c_multiplicity(Pat)∪(ran(new_c) × {1})})(m)∈(components{Pat ↦ components(Pat)∪ran(new_c)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="c_multiplicity(m)∈({Pat} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="m∈Pattern">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="({Pat} ⩤ c_multiplicity)(m)∈({Pat} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="¬m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/comp_disj/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p9,p2,p11,p12,p13,p14,p15,p26,p16,p17,p4,p18,p19,p5,p20,p6,p7,p8,p21,p22,p24,p25"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p23,p10,p3,p1,p9,p2,p11,p12,p13,p14,p15,p16,p17,p4,p18,p19,p5,p20,p6,p7,p8,p21,p22,p24,p25">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒(components{Pat ↦ components(Pat)∪ran(new_c)})(m1)∩(components{Pat ↦ components(Pat)∪ran(new_c)})(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/cont_ty/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="ae,ae0" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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="p12"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Pat)" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p13" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p14">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Pat)" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p13" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p14">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p8"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah ((ran(new_c) × {c});container(Pat)∈Component ∖ union(ran(components)) ⇸ Component)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p6,p7">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p13" 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.prAnte name="(" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="p7,p6">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="p1,p2,p5,p14,p8,p7,p6">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R30000"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p7,p6,p17">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ae ((ran(new_c) × {c});container(Pat))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p6,p7">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p13" 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.prAnte name="(" org.eventb.core.prHyps="p7,p6,p18">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he with ae=(ran(new_c) × {c});container(Pat)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p18">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p20">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p19"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p18"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah ({c} ⩤ container(Pat)∈components(Pat) ⇸ Component)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p21">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="p3,p6,p7,p9">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p22">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p22" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p13" 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.prAnte name="(" org.eventb.core.prGoal="p23" org.eventb.core.prHyps="p7,p6,p9,p3">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p23" org.eventb.core.prHyps="p1,p2,p5,p14,p8,p7,p6,p19,p9,p3">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R30000"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p7,p6,p9,p3,p23">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ae ({c} ⩤ container(Pat))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p6,p7">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p13" 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.prAnte name="(" org.eventb.core.prHyps="p7,p6,p24">
<org.eventb.core.prIdent name="ae0" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he with ae0={c} ⩤ container(Pat)" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p24">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p23" org.eventb.core.prInfHyps="p25"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p1,p2,p5,p14,p8,p7,p6,p19,p9,p3,p25">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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.prExprRef name=".expr" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p23"/>
</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.prExprRef name=".expr" org.eventb.core.prRef="e1"/>
</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.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e2"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e2"/>
</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="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="(ran(new_c) × {c});container(Pat)∈Component ∖ union(ran(components)) ⇸ Component"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="ae0={c} ⩤ container(Pat)">
<org.eventb.core.prIdent name="ae0" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="⊤∧⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="ae∈Component ∖ union(ran(components)) ⇸ Component">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="ae=(ran(new_c) × {c});container(Pat)">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="container{Pat ↦ ae0∪ae}∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="ae0" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="container{Pat ↦ ({c} ⩤ container(Pat))∪ae}∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="{c} ⩤ container(Pat)∈components(Pat) ⇸ Component"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="container(Pat)∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="ae0∈components(Pat) ⇸ Component">
<org.eventb.core.prIdent name="ae0" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))}∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prExpr name="e2" org.eventb.core.expression="Pat"/>
<org.eventb.core.prExpr name="e1" org.eventb.core.expression="(ran(new_c) × {c});container(Pat)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="{c} ⩤ container(Pat)"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allD"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.he:1"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.ae"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.cut"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/cont_ctr/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p22" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p25"/>
<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="p26"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p27">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p27" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p28">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p28">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p31" org.eventb.core.prHyps="p28">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p25,p1,p3,p4,p5,p7,p8,p9,p32,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p31" org.eventb.core.prHyps="p19,p2,p6,p28,p25,p1,p3,p4,p5,p7,p8,p9,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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.prHyps="p33">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p35">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p25,p1,p3,p4,p5,p7,p8,p9,p32,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p19,p2,p6,p28,p33,p25,p1,p3,p4,p5,p7,p8,p9,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p33">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p37" org.eventb.core.prHyps="p28">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p37" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p38">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p25,p1,p3,p4,p5,p7,p8,p9,p32,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p38" org.eventb.core.prHyps="p19,p2,p6,p28,p33,p25,p1,p3,p4,p5,p7,p8,p9,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p39" org.eventb.core.prHyps="p33">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p39" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p40">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p40" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p41">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p25,p1,p3,p4,p5,p7,p8,p9,p32,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p41" org.eventb.core.prHyps="p19,p2,p6,p28,p33,p25,p1,p3,p4,p5,p7,p8,p9,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p42" org.eventb.core.prHyps="p33">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p42" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="p28">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p44" org.eventb.core.prHyps="p28">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p44" org.eventb.core.prHyps="p13">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p25,p1,p3,p4,p5,p7,p8,p9,p32,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="p19,p2,p6,p33,p28,p25,p1,p3,p4,p5,p7,p8,p9,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p46" org.eventb.core.prHyps="p33">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p46" org.eventb.core.prHyps="p13">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p48">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p25,p1,p3,p4,p5,p7,p8,p9,p32,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p48" org.eventb.core.prHyps="p19,p2,p6,p33,p28,p25,p1,p3,p4,p5,p7,p8,p9,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="p33">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p50" org.eventb.core.prHyps="p28">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p50" org.eventb.core.prHyps="p13">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p51">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p51" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p52">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p25,p1,p3,p4,p5,p7,p8,p9,p32,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p52" org.eventb.core.prHyps="p19,p2,p6,p33,p28,p25,p1,p3,p4,p5,p7,p8,p9,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p53" org.eventb.core.prHyps="p33">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p53" org.eventb.core.prHyps="p13">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p54">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p54" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p55">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p55" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p56">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p25,p1,p3,p4,p5,p7,p8,p9,p32,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p56" org.eventb.core.prHyps="p19,p2,p6,p33,p25,p1,p3,p4,p5,p7,p8,p9,p10,p11,p12,p13,p15,p14,p16,p17,p18,p20,p21,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p52" org.eventb.core.predicate="container(m)∈components(m) ⇸ components(Pat)∪ran(new_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p51" org.eventb.core.predicate="container(m)∈({Pat} ⩤ components)(m) ⇸ components(Pat)∪ran(new_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p55" org.eventb.core.predicate="container(m)∈components(m) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈components(Pat)∪ran(new_c) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="container(m)∈components(Pat)∪ran(new_c) ⇸ components(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="container(m)∈components(Pat)∪ran(new_c) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈({Pat} ⩤ components)(m) ⇸ (components{Pat ↦ components(Pat)∪ran(new_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p53" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈({Pat} ⩤ components)(m) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))∈({Pat} ⩤ components)(m) ⇸ (components{Pat ↦ components(Pat)∪ran(new_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈({Pat} ⩤ components)(m) ⇸ components(Pat)∪ran(new_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))∈({Pat} ⩤ components)(m) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))∈components(Pat)∪ran(new_c) ⇸ components(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))∈components(m) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))∈components(m) ⇸ components(Pat)∪ran(new_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="(container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})(m)∈(components{Pat ↦ components(Pat)∪ran(new_c)})(m) ⇸ (components{Pat ↦ components(Pat)∪ran(new_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈(components{Pat ↦ components(Pat)∪ran(new_c)})(m) ⇸ (components{Pat ↦ components(Pat)∪ran(new_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·(container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})(m)∈(components{Pat ↦ components(Pat)∪ran(new_c)})(m) ⇸ (components{Pat ↦ components(Pat)∪ran(new_c)})(m)"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))∈({Pat} ⩤ components)(m) ⇸ components(Pat)∪ran(new_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="container(m)∈components(Pat)∪ran(new_c) ⇸ components(Pat)∪ran(new_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈components(Pat)∪ran(new_c) ⇸ (components{Pat ↦ components(Pat)∪ran(new_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="({Pat} ⩤ container)(m)∈components(Pat)∪ran(new_c) ⇸ components(Pat)∪ran(new_c)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p54" org.eventb.core.predicate="container(m)∈({Pat} ⩤ components)(m) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))∈components(Pat)∪ran(new_c) ⇸ components(Pat)∪ran(new_c)"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))∈components(Pat)∪ran(new_c) ⇸ ({Pat} ⩤ components)(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))∈components(Pat)∪ran(new_c) ⇸ (components{Pat ↦ components(Pat)∪ran(new_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p56" org.eventb.core.predicate="container(m)∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))∈(components{Pat ↦ components(Pat)∪ran(new_c)})(m) ⇸ (components{Pat ↦ components(Pat)∪ran(new_c)})(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="¬m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/acycl/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<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="p3"/>
<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 (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p5">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</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="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="instanciation_started∈BOOL">
<org.eventb.core.prIdent name="instanciation_started" org.eventb.core.type="BOOL"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·(container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·(container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/to_free_c/INV" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p3,p2,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Z3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="Z3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))">
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_free_c⊆(components{Pat ↦ components(Pat)∪ran(new_c)})(Pat)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components{Pat ↦ components(Pat)∪ran(new_c)})"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(c_multiplicity)">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="components{Pat ↦ components(Pat)∪ran(new_c)}∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/new_c_model/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p9,p2,p11,p12,p13,p14,p15,p26,p16,p17,p4,p18,p19,p5,p20,p6,p7,p8,p21,p22,p23,p24,p25"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p10,p3,p1,p9,p2,p11,p12,p13,p14,p15,p16,p17,p4,p18,p19,p5,p20,p6,p7,p8,p21,p22,p23,p24,p25">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/new_c_mult/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p9,p2,p11,p12,p13,p14,p15,p26,p16,p17,p4,p18,p19,p5,p20,p6,p7,p8,p21,p22,p23,p24,p25"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p10,p3,p1,p9,p2,p11,p12,p13,p14,p15,p16,p17,p4,p18,p19,p5,p20,p6,p7,p8,p21,p22,p23,p24,p25">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/new_c_container/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p9,p2,p11,p12,p13,p14,p15,p26,p16,p17,p4,p18,p19,p5,p20,p6,p7,p8,p21,p22,p23,p24,p25"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p10,p3,p1,p9,p2,p11,p12,p13,p14,p15,p16,p17,p4,p18,p19,p5,p20,p6,p7,p8,p21,p22,p23,p24,p25">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/VAR" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p11">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p4"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE3" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8"/>
<org.eventb.core.prHypAction name="REWRITE4" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬(∀sc·¬([[1]]∈sc∧(({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat)))∼[sc]⊆sc))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p12"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬(∀sc·¬([[1]]∈sc∧(container(Pat))∼[sc]⊆sc))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p13"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬¬([[1]]∈[[0]]∧(({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat)))∼[[[0]]]⊆[[0]])" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p12" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p14"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p14"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬¬([[1]]∈[[0]]∧(container(Pat))∼[[[0]]]⊆[[0]])" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p13" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p15"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p15"/>
<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="p16"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p17"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1.1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c0⦂Component·c0∈(to_unfold_c ∖ {c})∪ran(to_clone_c∪(ran(new_c) × {c}))⇒(∀sc⦂ℙ(Component)·c0∈sc⇒Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧Pat∈dom(container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})∧container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))}∈Model ⇸ ℙ(Component × Component))∧¬(∀sc⦂ℙ(Component)·¬(c0∈sc∧(({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat)))∼[sc]⊆sc))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀c⦂Component·c∈to_unfold_c∪ran(to_clone_c)⇒(∀sc⦂ℙ(Component)·c∈sc⇒Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component))∧{sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc ∣ sc}≠(∅ ⦂ ℙ(ℙ(Component)))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂Component·c∈to_free_c⇒¬(∀sc⦂ℙ(Component)·¬(c∈sc∧(container(Pat))∼[sc]⊆sc))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀c0⦂Component·c0∈to_free_c⇒(∀sc⦂ℙ(Component)·c0∈sc⇒Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧Pat∈dom(container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})∧container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))}∈Model ⇸ ℙ(Component × Component))∧(∃sc⦂ℙ(Component)·¬¬(c0∈sc∧(({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat)))∼[sc]⊆sc))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀c0⦂Component·c0∈to_free_c⇒(∀sc⦂ℙ(Component)·c0∈sc⇒Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧Pat∈dom(container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})∧container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))}∈Model ⇸ ℙ(Component × Component))∧(∃sc⦂ℙ(Component)·c0∈sc∧(({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat)))∼[sc]⊆sc)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="instanciation_started∈BOOL">
<org.eventb.core.prIdent name="instanciation_started" org.eventb.core.type="BOOL"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(⋃c0⦂Component·c0∈to_free_c ∣ {c0} × inter({sc⦂ℙ(Component)·c0∈sc∧((container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})(Pat))∼[sc]⊆sc ∣ sc})) × (⋃c0⦂Component·c0∈(to_unfold_c ∖ {c})∪ran(to_clone_c∪(ran(new_c) × {c})) ∣ {c0} × inter({sc⦂ℙ(Component)·c0∈sc∧((container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})(Pat))∼[sc]⊆sc ∣ sc}))⊂(⋃c⦂Component·c∈to_free_c ∣ {c} × inter({sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc ∣ sc})) × (⋃c⦂Component·c∈to_unfold_c∪ran(to_clone_c) ∣ {c} × inter({sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc ∣ sc}))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀c⦂Component·c∈to_free_c⇒(∃sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="∀c0⦂Component·c0∈to_free_c⇒(∀sc⦂ℙ(Component)·c0∈sc⇒Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧Pat∈dom(container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})∧container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))}∈Model ⇸ ℙ(Component × Component))∧{sc⦂ℙ(Component)·c0∈sc∧((container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})(Pat))∼[sc]⊆sc ∣ sc}≠(∅ ⦂ ℙ(ℙ(Component)))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀c⦂Component·c∈to_free_c⇒(∃sc⦂ℙ(Component)·¬¬(c∈sc∧(container(Pat))∼[sc]⊆sc))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀c0⦂Component·c0∈to_free_c⇒(∀sc⦂ℙ(Component)·c0∈sc⇒Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧Pat∈dom(container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})∧container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))}∈Model ⇸ ℙ(Component × Component))∧¬(∀sc⦂ℙ(Component)·¬(c0∈sc∧(({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat)))∼[sc]⊆sc))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="(⋃c0⦂Component·c0∈to_free_c ∣ {c0} × inter({sc⦂ℙ(Component)·c0∈sc∧(({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat)))∼[sc]⊆sc ∣ sc})) × (⋃c0⦂Component·c0∈(to_unfold_c ∖ {c})∪ran(to_clone_c∪(ran(new_c) × {c})) ∣ {c0} × inter({sc⦂ℙ(Component)·c0∈sc∧(({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat)))∼[sc]⊆sc ∣ sc}))⊂(⋃c⦂Component·c∈to_free_c ∣ {c} × inter({sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc ∣ sc})) × (⋃c⦂Component·c∈to_unfold_c∪ran(to_clone_c) ∣ {c} × inter({sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc ∣ sc}))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈to_free_c⇒{sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc ∣ sc}≠(∅ ⦂ ℙ(ℙ(Component)))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀c⦂Component·c∈to_unfold_c∪ran(to_clone_c)⇒(∀sc⦂ℙ(Component)·c∈sc⇒Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component))∧¬(∀sc⦂ℙ(Component)·¬(c∈sc∧(container(Pat))∼[sc]⊆sc))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀c0⦂Component·c0∈(to_unfold_c ∖ {c})∪ran(to_clone_c∪(ran(new_c) × {c}))⇒(∀sc⦂ℙ(Component)·c0∈sc⇒Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧Pat∈dom(container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})∧container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))}∈Model ⇸ ℙ(Component × Component))∧{sc⦂ℙ(Component)·c0∈sc∧((container{Pat ↦ ({c} ⩤ container(Pat))∪((ran(new_c) × {c});container(Pat))})(Pat))∼[sc]⊆sc ∣ sc}≠(∅ ⦂ ℙ(ℙ(Component)))"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.rn"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/VAR" org.eventb.core.confidence="0" org.eventb.core.prFresh="sc,s,i,c0" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="rewrite ⊂ 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="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p2" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p3"/>
<org.eventb.core.prRule name="r2" 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="p9">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬(∀sc·¬(sc⊆ℕ × components[{Pat}]∧(∀c·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c0·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)∧(∀c0·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i,c,s·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p11"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬(∀sc·¬(sc⊆ℕ × components[{Pat}]∧(∀c·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i,c,s·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p12" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p13"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬¬([[0]]⊆ℕ × components[{Pat}]∧(∀c·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆[[1]])∧(∀c0·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆[[1]])∧(∀c0·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆[[1]])∧(∀i,c,s·i ↦ c∈[[3]]∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆[[3]]))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p14"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p14"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬¬([[0]]⊆ℕ × components[{Pat}]∧(∀c·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆[[1]])∧(∀c·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆[[1]])∧(∀c·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆[[1]])∧(∀i,c,s·i ↦ c∈[[3]]∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆[[3]]))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p13" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p15"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prRule name="r4" 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="p16"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p18" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p19"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p19" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p20"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∃ hyp (∃sc·sc⊆ℕ × components[{Pat}]∧(∀c·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c0·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)∧(∀c0·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i,c,s·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p14" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p21,p22,p23,p24,p25">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prHypAction>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p21,p22,p23,p24,p25"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∃ hyp (∃sc·sc⊆ℕ × components[{Pat}]∧(∀c·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i,c,s·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p15" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p26,p27,p28,p29,p30">
<org.eventb.core.prIdent name="sc0" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prHypAction>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p26,p27,p28,p29,p30"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees sc)" org.eventb.core.prGoal="p9" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p31">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p31" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p21,p32,p23,p24,p25">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p24">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="p24"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p32">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees c0)" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p35">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p37"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p37" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p38"/>
</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.prAnte name=")" org.eventb.core.prGoal="p39">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees c0)" org.eventb.core.prGoal="p39" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p40">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p40" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p42" org.eventb.core.prHyps="p41">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p37"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p37" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p38"/>
</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.prAnte name="*" org.eventb.core.prGoal="p43">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees c0)" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p44">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p44" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p46" org.eventb.core.prHyps="p45">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p37"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p37" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p38"/>
</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.prAnte name="+" org.eventb.core.prGoal="p23">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees i,c0,s)" org.eventb.core.prGoal="p23" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47">
<org.eventb.core.prIdent name="i" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="s" org.eventb.core.type="Component"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p50" org.eventb.core.prHyps="p48,p49">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p37"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p37" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p38"/>
</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.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.prRule>
</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.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1"/>
</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.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="p51">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p2" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p3"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p51" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p52">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p8"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬(∀sc·¬(sc⊆ℕ × components[{Pat}]∧(∀c·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c0·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)∧(∀c0·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i,c,s·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p11"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬(∀sc·¬(sc⊆ℕ × components[{Pat}]∧(∀c·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i,c,s·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p12" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p13"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬¬([[0]]⊆ℕ × components[{Pat}]∧(∀c·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆[[1]])∧(∀c0·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆[[1]])∧(∀c0·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆[[1]])∧(∀i,c,s·i ↦ c∈[[3]]∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆[[3]]))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p14"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p14"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬¬([[0]]⊆ℕ × components[{Pat}]∧(∀c·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆[[1]])∧(∀c·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆[[1]])∧(∀c·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆[[1]])∧(∀i,c,s·i ↦ c∈[[3]]∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆[[3]]))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p13" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p15"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prRule name="r4" 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="p16"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p18" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p19"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p19" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p20"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∃ hyp (∃sc·sc⊆ℕ × components[{Pat}]∧(∀c·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c0·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)∧(∀c0·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i,c,s·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p14" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p21,p22,p23,p24,p25">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prHypAction>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p21,p22,p23,p24,p25"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∃ hyp (∃sc·sc⊆ℕ × components[{Pat}]∧(∀c·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i,c,s·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p15" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p26,p27,p28,p29,p30">
<org.eventb.core.prIdent name="sc0" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prHypAction>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p26,p27,p28,p29,p30"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p37"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p37" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p38"/>
</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.prRule>
</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.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1"/>
</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.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="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="c0∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}]) × {c0}⊆sc">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="∀c⦂Component·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="i ↦ c0∈sc∧s ↦ c0∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="i" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="s" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="sc0⊆ℕ × components[{Pat}]">
<org.eventb.core.prIdent name="sc0" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)∧(∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)⇒sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c⦂Component·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c⦂Component·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="1 ‥ card(to_unfold_c_in[{c0}]) × {c0}⊆sc">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p52" org.eventb.core.predicate="¬{sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)∧(∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc) ∣ sc}={sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c⦂Component·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c⦂Component·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc) ∣ sc}"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="c0∈ran(to_clone_c)">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="∀c⦂Component·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc0">
<org.eventb.core.prIdent name="sc0" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="∀sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]⇒(∀c⦂Component·c∈to_unfold_c⇒c∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ)∧((∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)⇒(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒finite(to_clone_c∼[{c0}] ∖ {c}))∧((∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)⇒to_clone_c∈Component ⇸ Component∧(∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒finite((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]))∧((∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)⇒(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒s∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ))))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∃sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c⦂Component·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c⦂Component·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="c0∈to_unfold_c">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="c0∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c0) × {c0}⊆sc">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]⇒(∀c⦂Component·c∈to_unfold_c⇒c∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ)∧((∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)⇒(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒finite(to_clone_c∼[{c0}] ∖ {c}))∧((∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)⇒c∈dom(to_clone_c)∧to_clone_c∈Component ⇸ Component∧(∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒finite((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]))∧((∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)⇒(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒s∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ))))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="∀c⦂Component·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="i ↦ c0∈sc">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="i" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="∀c⦂Component·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc0">
<org.eventb.core.prIdent name="sc0" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)∧(∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)⇒sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c⦂Component·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c⦂Component·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∃sc⦂ℙ(ℤ×Component)·¬¬(sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)∧(∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc0∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc0">
<org.eventb.core.prIdent name="sc0" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]⇒(∀c⦂Component·c∈to_unfold_c⇒c∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ)∧((∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)⇒(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒finite(({c} ⩤ to_clone_c)∼[{c0}]))∧((∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(({c} ⩤ to_clone_c)∼[{c0}]) × {c0}⊆sc)⇒(∀c0⦂Component·c∈dom(to_clone_c)∧to_clone_c∈Component ⇸ Component∧(c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒finite((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}])))∧((∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)⇒(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒s∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ))))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="¬(∀sc⦂ℙ(ℤ×Component)·¬(sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c⦂Component·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c⦂Component·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="{sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(({c} ⩤ to_clone_c)∼[{c0}]) × {c0}⊆sc)∧(∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc) ∣ sc}⊆{sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c⦂Component·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c⦂Component·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc) ∣ sc}"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="∀c⦂Component·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="{sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(({c} ⩤ to_clone_c)∼[{c0}]) × {c0}⊆sc)∧(∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc) ∣ sc}⊂{sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c⦂Component·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c⦂Component·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc) ∣ sc}"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∃sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)∧(∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="∀c⦂Component·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc0">
<org.eventb.core.prIdent name="sc0" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="¬(∀sc⦂ℙ(ℤ×Component)·¬(sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)∧(∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="∀sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]⇒(∀c⦂Component·c∈to_unfold_c⇒c∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ)∧((∀c⦂Component·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)⇒(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒finite(({c} ⩤ to_clone_c)∼[{c0}]))∧((∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(({c} ⩤ to_clone_c)∼[{c0}]) × {c0}⊆sc)⇒(∀c0⦂Component·c∈dom(to_clone_c)∧to_clone_c∈Component ⇸ Component∧(c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒finite((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}])))∧((∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)⇒(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒s∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ))))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∃sc⦂ℙ(ℤ×Component)·¬¬(sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)∧(∀c⦂Component·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c⦂Component·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="sc⊆ℕ × components[{Pat}]">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="1 ‥ i∗c_multiplicity(s) × {s}⊆sc">
<org.eventb.core.prIdent name="i" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="s" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="∀sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]⇒(∀c⦂Component·c∈to_unfold_c⇒c∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ)∧((∀c⦂Component·c∈to_unfold_c⇒1 ‥ c_multiplicity(c) × {c}⊆sc)⇒(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒finite(({c} ⩤ to_clone_c)∼[{c0}]))∧((∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(({c} ⩤ to_clone_c)∼[{c0}]) × {c0}⊆sc)⇒(∀c0⦂Component·⊤∧to_clone_c∈Component ⇸ Component∧(c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒finite((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}])))∧((∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)⇒(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒s∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ))))"/>
<org.eventb.core.prPred name="p51" org.eventb.core.predicate="¬{sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(({c} ⩤ to_clone_c)∼[{c0}]) × {c0}⊆sc)∧(∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc) ∣ sc}={sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c⦂Component·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c⦂Component·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc) ∣ sc}"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="1 ‥ 1+c_multiplicity(c0) × {c0}⊆sc">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="s ↦ c0∈container">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="s" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="sc⊆ℕ × components[{Pat}]∧(∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)∧(∀c⦂Component·c∈ran(to_clone_c)⇒1 ‥ card(to_clone_c∼[{c}]) × {c}⊆sc)∧(∀c⦂Component·c∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c}]) × {c}⊆sc)∧(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒1 ‥ i∗c_multiplicity(s) × {s}⊆sc)">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="∀sc⦂ℙ(ℤ×Component)·sc⊆ℕ × components[{Pat}]⇒(∀c⦂Component·c∈to_unfold_c⇒c∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ)∧((∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc)⇒(∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒finite(to_clone_c∼[{c0}] ∖ {c}))∧((∀c0⦂Component·c0∈ran({c} ⩤ to_clone_c)⇒1 ‥ card(to_clone_c∼[{c0}] ∖ {c}) × {c0}⊆sc)⇒⊤∧to_clone_c∈Component ⇸ Component∧(∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒finite((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]))∧((∀c0⦂Component·c0∈dom(to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))⇒1 ‥ card((to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c}))[{c0}]) × {c0}⊆sc)⇒(∀i⦂ℤ,c⦂Component,s⦂Component·i ↦ c∈sc∧s ↦ c∈container⇒s∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ))))"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="1 ‥ card(to_clone_c∼[{c0}]) × {c0}⊆sc">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="∀c⦂Component·c∈to_unfold_c⇒1 ‥ 1+c_multiplicity(c) × {c}⊆sc">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="c0∈dom(to_unfold_c_in)⇒1 ‥ card(to_unfold_c_in[{c0}]) × {c0}⊆sc">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="c0∈dom(to_unfold_c_in)">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.sir"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.exF"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.rn"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/f/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p4,p5,p6,p7,p8,p22,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p16,p3,p1,p2,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/VAR" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="p15">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p4"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6,p7,p8"/>
<org.eventb.core.prHypAction name="REWRITE3" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<org.eventb.core.prHypAction name="REWRITE4" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p12"/>
<org.eventb.core.prHypAction name="REWRITE5" org.eventb.core.prHidden="p13" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p14"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬(∀sc·¬([[1]]∈sc∧(container(Pat))∼[sc] ∖ {c}⊆sc))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p16"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p16"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬(∀sc·¬([[1]]∈sc∧(container(Pat))∼[sc]⊆sc))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p12" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p17"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬¬([[1]]∈[[0]]∧(container(Pat))∼[[[0]]] ∖ {c}⊆[[0]])" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p16" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p18"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p18"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ¬ in ¬¬([[1]]∈[[0]]∧(container(Pat))∼[[[0]]]⊆[[0]])" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p17" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p19"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p19"/>
<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="p20"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p21"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1.1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∀c0⦂Component·c0∈(to_free_c ∖ {c})∪(container(Pat))∼[{c}]⇒(∀sc⦂ℙ(Component)·c0∈sc⇒Pat∈dom(container{Pat ↦ {c} ⩤ container(Pat)})∧container{Pat ↦ {c} ⩤ container(Pat)}∈Model ⇸ ℙ(Component × Component))∧(∃sc⦂ℙ(Component)·c0∈sc∧(container(Pat))∼[sc] ∖ {c}⊆sc)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀c⦂Component·c∈to_free_c⇒¬(∀sc⦂ℙ(Component)·¬(c∈sc∧(container(Pat))∼[sc]⊆sc))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀c0⦂Component·c0∈to_unfold_c∪ran(to_clone_c)⇒(∀sc⦂ℙ(Component)·c0∈sc⇒Pat∈dom(container{Pat ↦ {c} ⩤ container(Pat)})∧container{Pat ↦ {c} ⩤ container(Pat)}∈Model ⇸ ℙ(Component × Component))∧¬(∀sc⦂ℙ(Component)·¬(c0∈sc∧(container(Pat))∼[sc] ∖ {c}⊆sc))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀c⦂Component·c∈to_free_c⇒(∃sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c0⦂Component·c0∈(to_free_c ∖ {c})∪(container(Pat))∼[{c}]⇒(∀sc⦂ℙ(Component)·c0∈sc⇒Pat∈dom(container{Pat ↦ {c} ⩤ container(Pat)})∧container{Pat ↦ {c} ⩤ container(Pat)}∈Model ⇸ ℙ(Component × Component))∧¬(∀sc⦂ℙ(Component)·¬(c0∈sc∧(container(Pat))∼[sc] ∖ {c}⊆sc))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀c⦂Component·c∈to_free_c⇒(∃sc⦂ℙ(Component)·¬¬(c∈sc∧(container(Pat))∼[sc]⊆sc))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="¬c∈to_unfold_c"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀c0⦂Component·Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧(c0∈(to_free_c ∖ {c})∪(container(Pat))∼[{c}]⇒(∀sc⦂ℙ(Component)·c0∈sc⇒Pat∈dom(container{Pat ↦ {c} ⩤ container(Pat)})∧container{Pat ↦ {c} ⩤ container(Pat)}∈Model ⇸ ℙ(Component × Component))∧{sc⦂ℙ(Component)·c0∈sc∧((container{Pat ↦ {c} ⩤ container(Pat)})(Pat))∼[sc]⊆sc ∣ sc}≠(∅ ⦂ ℙ(ℙ(Component))))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Mdl∈Model">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(⋃c0⦂Component·c0∈(to_free_c ∖ {c})∪(container(Pat))∼[{c}] ∣ {c0} × inter({sc⦂ℙ(Component)·c0∈sc∧((container{Pat ↦ {c} ⩤ container(Pat)})(Pat))∼[sc]⊆sc ∣ sc})) × (⋃c0⦂Component·c0∈to_unfold_c∪ran(to_clone_c) ∣ {c0} × inter({sc⦂ℙ(Component)·c0∈sc∧((container{Pat ↦ {c} ⩤ container(Pat)})(Pat))∼[sc]⊆sc ∣ sc}))⊂(⋃c⦂Component·c∈to_free_c ∣ {c} × inter({sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc ∣ sc})) × (⋃c⦂Component·c∈to_unfold_c∪ran(to_clone_c) ∣ {c} × inter({sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc ∣ sc}))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀c⦂Component·c∈to_free_c⇒{sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc ∣ sc}≠(∅ ⦂ ℙ(ℙ(Component)))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀c⦂Component·c∈to_unfold_c∪ran(to_clone_c)⇒{sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc ∣ sc}≠(∅ ⦂ ℙ(ℙ(Component)))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="(⋃c0⦂Component·c0∈(to_free_c ∖ {c})∪(container(Pat))∼[{c}] ∣ {c0} × inter({sc⦂ℙ(Component)·c0∈sc∧(container(Pat))∼[sc] ∖ {c}⊆sc ∣ sc})) × (⋃c0⦂Component·c0∈to_unfold_c∪ran(to_clone_c) ∣ {c0} × inter({sc⦂ℙ(Component)·c0∈sc∧(container(Pat))∼[sc] ∖ {c}⊆sc ∣ sc}))⊂(⋃c⦂Component·c∈to_free_c ∣ {c} × inter({sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc ∣ sc})) × (⋃c⦂Component·c∈to_unfold_c∪ran(to_clone_c) ∣ {c} × inter({sc⦂ℙ(Component)·c∈sc∧(container(Pat))∼[sc]⊆sc ∣ sc}))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀c0⦂Component·c0∈(to_free_c ∖ {c})∪(container(Pat))∼[{c}]⇒(∀sc⦂ℙ(Component)·c0∈sc⇒Pat∈dom(container{Pat ↦ {c} ⩤ container(Pat)})∧container{Pat ↦ {c} ⩤ container(Pat)}∈Model ⇸ ℙ(Component × Component))∧(∃sc⦂ℙ(Component)·¬¬(c0∈sc∧(container(Pat))∼[sc] ∖ {c}⊆sc))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀c0⦂Component·c0∈to_unfold_c∪ran(to_clone_c)⇒(∀sc⦂ℙ(Component)·c0∈sc⇒Pat∈dom(container{Pat ↦ {c} ⩤ container(Pat)})∧container{Pat ↦ {c} ⩤ container(Pat)}∈Model ⇸ ℙ(Component × Component))∧{sc⦂ℙ(Component)·c0∈sc∧((container{Pat ↦ {c} ⩤ container(Pat)})(Pat))∼[sc]⊆sc ∣ sc}≠(∅ ⦂ ℙ(ℙ(Component)))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀c⦂Component·c∈to_unfold_c∪ran(to_clone_c)⇒¬(∀sc⦂ℙ(Component)·¬(c∈sc∧(container(Pat))∼[sc]⊆sc))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.rn"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/to_unfold_c/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<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="p8"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p10"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p5,p3,p4,p2,p1">
<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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="container[dom(inst_components)]⊆dom(inst_components)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="containers∈Component ↔ Component">
<org.eventb.core.prIdent name="containers" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="dom(inst_components) ◁ container;inst_components⊆inst_components;container"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="inst_components∈components[{Inst}] ⤔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="new_components∈components[{Inst}] ∖ dom(inst_components) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_c⊆(components∪({Mdl} × ran(new_components)))[{Pat}]"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/to_unfold_c/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p28">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p23" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p27"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p8,p27,p9,p10,p2,p11,p12,p13,p14,p29,p15,p16,p4,p17,p18,p5,p6,p7,p20,p21,p22,p25,p26"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="p24,p19,p3,p1,p8,p27,p9,p10,p2,p11,p12,p13,p14,p15,p16,p4,p17,p18,p5,p6,p7,p20,p21,p22,p25,p26">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(to_unfold_c ∖ {c})∪ran(cloned_c)⊆(components{Pat ↦ components(Pat)∪ran(cloned_c)})(Pat)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈dom(components{Pat ↦ components(Pat)∪ran(cloned_c)})"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="components{Pat ↦ components(Pat)∪ran(cloned_c)}∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="to_unfold_c ∖ {c}⊆components(Pat)∪ran(cloned_c)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/to_unfold_c/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p4,p1,p16,p17,p18,p19,p20,p21,p22,p23"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Z3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="Z3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="components{Pat ↦ components(Pat) ∖ {c}}∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Pat∈dom(components{Pat ↦ components(Pat) ∖ {c}})"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="to_free_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_c⊆(components{Pat ↦ components(Pat) ∖ {c}})(Pat)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/cm/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="ae" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<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="p11"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp mp (inst Pat)" org.eventb.core.prHyps="p7">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p7"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p12" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p1">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p7"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p1" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p13">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p7"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Pat)" org.eventb.core.prHyps="p6">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p12" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p14">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p6"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))∈Component ⇸ ℕ)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p2,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p12" 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.prAnte name="(" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="p3,p2">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="p4,p5,p8,p13,p14,p3,p2">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p3,p2,p17">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ae (c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat)))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p2,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p12" 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.prAnte name="(" org.eventb.core.prHyps="p3,p2,p18">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he with ae=c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p18">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p20">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p19"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p18"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p4,p5,p8,p13,p14,p3,p2,p19">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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.prExprRef name=".expr" org.eventb.core.prRef="e0"/>
</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.prExprRef name=".exprs" org.eventb.core.prRef="e1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e1"/>
</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="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="ae=c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="ae∈Component ⇸ ℕ">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity(Pat)∈components(Pat) → ℕ"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))∈Component ⇸ ℕ"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="container(Pat)∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="c_multiplicity{Pat ↦ ae}∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c_multiplicity{Pat ↦ c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))}∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prExpr name="e1" org.eventb.core.expression="Pat"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="c_multiplicity(Pat)∪(cloned_c∼;c_multiplicity(Pat))"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.allD"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="org.eventb.core.seqprover.he:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allmpD:0"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.ae"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r11" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.cut"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/mult/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p25,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21,p22,p23,p24"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p16,p9,p1,p2,p3,p4,p5,p6,p7,p8,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21,p22,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/cm/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p8">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p8" 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="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pat∈dom(components)"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/cm/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<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="p3"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p2,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p14,p20"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p7"/>
<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="p23">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p21" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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="p24"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p25" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p26"/>
<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="REWRITE0" org.eventb.core.prHidden="p26" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p27"/>
</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.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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_mult_others" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ1)">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c_multiplicity(c_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])})∈({Inst} ⩤ components)[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Mdl∈dom(components)">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_free_c⊆components(Pat)">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c_multiplicityc_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}∈({Inst} ⩤ components)[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀pc⦂Component·pc∈dom(inst_components)⇒finite(inst_components[{pc}])"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ1">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_unfold_c⊆components(Pat)">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Pat∈dom(components)">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<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="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/cm_ctr/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="pc,ae,x,x0,x1,m" 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" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p34" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p39"/>
<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="p40"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p41">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p41" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="p42">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="p44">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="p46">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p48">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p48" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p49">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Pat" org.eventb.core.prHyps="p44">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p46" org.eventb.core.prInfHyps="p50"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p46,p42"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with Pat=Inst" org.eventb.core.prHyps="p50">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p32" org.eventb.core.prInfHyps="p51"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p2" org.eventb.core.prInfHyps="p52"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p7" org.eventb.core.prInfHyps="p53"/>
<org.eventb.core.prHypAction name="FORWARD_INF3" org.eventb.core.prHyps="p20" org.eventb.core.prInfHyps="p54"/>
<org.eventb.core.prHypAction name="FORWARD_INF4" org.eventb.core.prHyps="p9" org.eventb.core.prInfHyps="p55"/>
<org.eventb.core.prHypAction name="DESELECT5" org.eventb.core.prHyps="p7,p2,p9,p32,p20,p44"/>
<org.eventb.core.prHypAction name="SELECT6" org.eventb.core.prHyps="p46"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="p29,p9,p31,p23,p5,p12,p27,p15,p35,p30,p22,p25,p16,p36,p13,p10,p17,p37,p28,p18,p1,p38,p33,p26,p8,p19,p3,p6,p24,p14,p11,p4,p32,p21,p2,p7,p20,p39,p42,p44,p46,p50,p51,p52,p53,p54,p55">
<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="p56">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees pc)" org.eventb.core.prGoal="p56" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p57">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Pat" org.eventb.core.prHyps="p44">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p46" org.eventb.core.prInfHyps="p50"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p46,p42"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with Pat=Inst" org.eventb.core.prHyps="p50">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p32" org.eventb.core.prInfHyps="p51"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p2" org.eventb.core.prInfHyps="p52"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p7" org.eventb.core.prInfHyps="p53"/>
<org.eventb.core.prHypAction name="FORWARD_INF3" org.eventb.core.prHyps="p20" org.eventb.core.prInfHyps="p54"/>
<org.eventb.core.prHypAction name="FORWARD_INF4" org.eventb.core.prHyps="p9" org.eventb.core.prInfHyps="p55"/>
<org.eventb.core.prHypAction name="DESELECT5" org.eventb.core.prHyps="p7,p2,p9,p32,p20,p44"/>
<org.eventb.core.prHypAction name="SELECT6" org.eventb.core.prHyps="p46"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p57" org.eventb.core.prHyps="p29,p9,p31,p23,p5,p12,p27,p15,p35,p30,p22,p25,p16,p36,p13,p10,p17,p37,p28,p18,p1,p38,p33,p26,p8,p19,p3,p6,p24,p14,p11,p4,p32,p21,p2,p7,p20,p39,p42,p44,p46,p50,p51,p52,p53,p54,p55">
<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.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p59" org.eventb.core.prHyps="p58">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p59" org.eventb.core.prHyps="p5">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p60">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Pat" org.eventb.core.prGoal="p60" org.eventb.core.prHyps="p44">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p58" org.eventb.core.prInfHyps="p61"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p42,p58"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah ({pc·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}∈dom(inst_components) → ℕ)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p63">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees pc)" org.eventb.core.prGoal="p63" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p64">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p64" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p66" org.eventb.core.prHyps="p65">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite set" org.eventb.core.prGoal="p66" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p67">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p67" org.eventb.core.prHyps="p13,p21">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p68">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p68" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p69">
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p69" 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.prAnte name="(" org.eventb.core.prGoal="p70">
<org.eventb.core.prRule name="r13" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Mdl)" org.eventb.core.prHyps="p12">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p69">
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p69" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p70">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prRule name="r14" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p70" org.eventb.core.prHyps="p70"/>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p71">
<org.eventb.core.prRule name="r15" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p71" org.eventb.core.prHyps="p2,p9,p7,p65,p25,p61,p32,p20,p44">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R30000"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e1"/>
</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="p72" org.eventb.core.prHyps="p63">
<org.eventb.core.prRule name="r16" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p2,p9,p7,p25,p61,p20,p44"/>
<org.eventb.core.prRule name="r16" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p63"/>
<org.eventb.core.prRule name="r16" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p5"/>
<org.eventb.core.prRule name="r17" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ∈ in goal" org.eventb.core.prGoal="p72" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p73">
<org.eventb.core.prRule name="r17" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="remove ∈ in goal" org.eventb.core.prGoal="p73" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p74">
<org.eventb.core.prRule name="r18" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p74" org.eventb.core.prHyps="p32,p5">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p75">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p75" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p76">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees x,x0,x1)" org.eventb.core.prGoal="p76" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p77">
<org.eventb.core.prIdent name="x" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="x0" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="x1" org.eventb.core.type="ℤ"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p77" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p81" org.eventb.core.prHyps="p78,p79,p80">
<org.eventb.core.prRule name="r19" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he with card(inst_components[{x}])=x0" org.eventb.core.prGoal="p81" org.eventb.core.prHyps="p79">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p80">
<org.eventb.core.prRule name="r14" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p80" org.eventb.core.prHyps="p80"/>
</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.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p82">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p82" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p69">
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p69" 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.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.prHyps="p63,p72">
<org.eventb.core.prRule name="r20" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ae ({pc·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])})" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p63">
<org.eventb.core.prRule name="r14" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p63" org.eventb.core.prHyps="p63"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p63,p83">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prRule name="r19" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he with ae={pc·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}" org.eventb.core.prGoal="p62" org.eventb.core.prHyps="p83">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p85">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p72" org.eventb.core.prInfHyps="p84"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p72"/>
<org.eventb.core.prRule name="r16" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p83"/>
<org.eventb.core.prRule name="r16" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p2,p9,p63,p25,p61,p20,p44"/>
<org.eventb.core.prRule name="r18" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p85" org.eventb.core.prHyps="p7,p32,p84">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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.prExprRef name=".expr" org.eventb.core.prRef="e2"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p72"/>
</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="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p87" org.eventb.core.prHyps="p86">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p87" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p88" org.eventb.core.prHyps="p46">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p88" org.eventb.core.prHyps="p22">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p89">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p89" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p90">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Inst" org.eventb.core.prGoal="p90" org.eventb.core.prHyps="p46">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p92">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p42" org.eventb.core.prInfHyps="p55"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p86" org.eventb.core.prInfHyps="p91"/>
<org.eventb.core.prHypAction name="DESELECT2" org.eventb.core.prHyps="p86,p42"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p92" org.eventb.core.prHyps="p29,p9,p31,p23,p5,p12,p27,p15,p35,p30,p22,p25,p16,p36,p13,p10,p17,p37,p28,p18,p1,p38,p33,p26,p8,p19,p3,p6,p24,p14,p11,p4,p32,p21,p2,p7,p20,p39,p42,p86,p46,p55,p91">
<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.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p93" org.eventb.core.prHyps="p58">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p93" org.eventb.core.prHyps="p22">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p94">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p94" org.eventb.core.prHyps="p5">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p95">
<org.eventb.core.prRule name="r15" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p95" org.eventb.core.prHyps="p2,p42,p7,p25,p58,p86,p32,p20">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_mult_others" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="pat_roots" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container(Pat)"/>
<org.eventb.core.prPred name="p68" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p92" org.eventb.core.predicate="c_multiplicity(Inst)=(∅ ⦂ ℙ(Component×ℤ))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p81" org.eventb.core.predicate="x0=x1">
<org.eventb.core.prIdent name="x0" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="x1" org.eventb.core.type="ℤ"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p53" org.eventb.core.predicate="c_mult_others∈components(Inst) ∖ dom(inst_components) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="c_mult_others∈components(Pat) ∖ dom(inst_components) → ℕ"/>
<org.eventb.core.prPred name="p89" org.eventb.core.predicate="c_multiplicity(m)∈(∅ ⦂ ℙ(Component)) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="Pat=Inst"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p73" org.eventb.core.predicate="{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}∈dom(inst_components) ⇸ ℕ"/>
<org.eventb.core.prPred name="p80" org.eventb.core.predicate="card(inst_components[{x}])=x1">
<org.eventb.core.prIdent name="x" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="x1" org.eventb.core.type="ℤ"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p65" org.eventb.core.predicate="pc∈dom(inst_components)">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_clone_c∈components(Inst) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_clone_c⊆inst2pat_c"/>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="c_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}∈(∅ ⦂ ℙ(Component)) → ℕ"/>
<org.eventb.core.prPred name="p58" org.eventb.core.predicate="¬m=Inst">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p76" org.eventb.core.predicate="∀x⦂Component,x0⦂ℤ,x1⦂ℤ·x∈dom(inst_components)∧card(inst_components[{x}])=x0∧card(inst_components[{x}])=x1⇒x0=x1"/>
<org.eventb.core.prPred name="p66" org.eventb.core.predicate="finite(inst_components[{pc}])">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="pat_roots=components(Pat) ∖ dom(container(Pat))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p78" org.eventb.core.predicate="x∈dom(inst_components)">
<org.eventb.core.prIdent name="x" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p70" org.eventb.core.predicate="finite(components(Mdl))"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="m∈Pattern">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p83" org.eventb.core.predicate="ae={pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="inst2pat_c;container(Pat)=container(Inst);inst2pat_c"/>
<org.eventb.core.prPred name="p61" org.eventb.core.predicate="¬Pat=Inst"/>
<org.eventb.core.prPred name="p82" org.eventb.core.predicate="dom({pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])})=dom(inst_components)"/>
<org.eventb.core.prPred name="p94" org.eventb.core.predicate="c_multiplicity(m)∈({Inst} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p84" org.eventb.core.predicate="ae∈dom(inst_components) → ℕ">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p54" org.eventb.core.predicate="pat_roots=components(Inst) ∖ dom(container(Inst))"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="inst2pat_c∈components(Inst) → components(Pat)"/>
<org.eventb.core.prPred name="p63" org.eventb.core.predicate="∀pc⦂Component·pc∈dom(inst_components)⇒finite(inst_components[{pc}])"/>
<org.eventb.core.prPred name="p87" org.eventb.core.predicate="({Pat} ⩤ c_multiplicity)(m)∈(components{Inst ↦ (∅ ⦂ ℙ(Component))})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p55" org.eventb.core.predicate="Inst∈Pattern"/>
<org.eventb.core.prPred name="p67" org.eventb.core.predicate="Mdl∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p79" org.eventb.core.predicate="card(inst_components[{x}])=x0">
<org.eventb.core.prIdent name="x" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="x0" org.eventb.core.type="ℤ"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="∀m⦂Model·container(m)∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p90" org.eventb.core.predicate="c_multiplicity(m)=(∅ ⦂ ℙ(Component×ℤ))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="m∈Pattern⇒(c_multiplicity{Pat ↦ c_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}})(m)∈(components{Inst ↦ (∅ ⦂ ℙ(Component))})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="inst_components∈components(Pat) ↔ components(Mdl)"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p64" org.eventb.core.predicate="pc∈dom(inst_components)⇒finite(inst_components[{pc}])">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p60" org.eventb.core.predicate="c_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}∈components(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="inst_components∼∈components(Mdl) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p85" org.eventb.core.predicate="c_mult_othersae∈components(Pat) → ℕ">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(Component×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒(c_multiplicity{Pat ↦ c_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}})(m)∈(components{Inst ↦ (∅ ⦂ ℙ(Component))})(m) → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c∩dom(container(Pat))=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p75" org.eventb.core.predicate="∀x⦂Component,x0⦂ℤ,x1⦂ℤ·x ↦ x0∈{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}∧x ↦ x1∈{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}⇒x0=x1"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Inst∈dom(components)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p51" org.eventb.core.predicate="inst_components∈components(Inst) ↔ components(Mdl)"/>
<org.eventb.core.prPred name="p62" org.eventb.core.predicate="c_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}∈components(Pat) → ℕ"/>
<org.eventb.core.prPred name="p71" org.eventb.core.predicate="inst_components[{pc}]⊆components(Mdl)">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Inst∈dom(container)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_unfold_c_in∈components(Pat) ↔ components(Inst)"/>
<org.eventb.core.prPred name="p91" org.eventb.core.predicate="¬Inst=Pat"/>
<org.eventb.core.prPred name="p74" org.eventb.core.predicate="{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}∈dom(inst_components) ↔ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container(Pat))"/>
<org.eventb.core.prPred name="p59" org.eventb.core.predicate="c_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}∈({Inst} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p93" org.eventb.core.predicate="({Pat} ⩤ c_multiplicity)(m)∈({Inst} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="c_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}∈(components{Inst ↦ (∅ ⦂ ℙ(Component))})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p72" org.eventb.core.predicate="{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}∈dom(inst_components) → ℕ"/>
<org.eventb.core.prPred name="p88" org.eventb.core.predicate="({Pat} ⩤ c_multiplicity)(m)∈(∅ ⦂ ℙ(Component)) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="c_mult_others=(∅ ⦂ ℙ(Component×ℤ))"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p69" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p77" org.eventb.core.predicate="x∈dom(inst_components)∧card(inst_components[{x}])=x0∧card(inst_components[{x}])=x1⇒x0=x1">
<org.eventb.core.prIdent name="x" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="x0" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="x1" org.eventb.core.type="ℤ"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="(c_multiplicity{Pat ↦ c_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}})(m)∈(components{Inst ↦ (∅ ⦂ ℙ(Component))})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p57" org.eventb.core.predicate="¬pc∈dom(inst_components)">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="c_mult_others=(∅ ⦂ ℙ(Component×ℤ))∧(∀pc⦂Component·¬pc∈dom(inst_components))"/>
<org.eventb.core.prPred name="p95" org.eventb.core.predicate="c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p56" org.eventb.core.predicate="∀pc⦂Component·¬pc∈dom(inst_components)"/>
<org.eventb.core.prPred name="p52" org.eventb.core.predicate="inst_components∼∈components(Mdl) ⇸ components(Inst)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="m=Inst">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p86" org.eventb.core.predicate="¬m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·f∈components(m) ↔ components(m)∧container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Mdl"/>
<org.eventb.core.prExpr name="e1" org.eventb.core.expression="components(Mdl)"/>
<org.eventb.core.prExpr name="e2" org.eventb.core.expression="{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}"/>
<org.eventb.core.prReas name="r18" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r17" org.eventb.core.prRID="org.eventb.core.seqprover.rmL1"/>
<org.eventb.core.prReas name="r16" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="org.eventb.core.seqprover.finiteSet:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r14" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.cut"/>
<org.eventb.core.prReas name="r12" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r20" org.eventb.core.prRID="org.eventb.core.seqprover.ae"/>
<org.eventb.core.prReas name="r13" org.eventb.core.prRID="org.eventb.core.seqprover.allD"/>
<org.eventb.core.prReas name="r15" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r19" org.eventb.core.prRID="org.eventb.core.seqprover.he:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r11" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/c_mult/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="pc" 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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p19" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p29"/>
<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="p30"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p32"/>
<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="REWRITE0" org.eventb.core.prHidden="p32" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p33"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees pc)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p35">
<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="p26,p9,p28,p6,p8,p11,p3,p18,p17,p23,p20,p7,p27,p12,p1,p21,p15,p14,p2,p4,p24,p10,p25,p16,p13,p22,p29,p33,p35">
<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.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_mult_others" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="pc∈dom(inst_components)">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_clone_c⊆inst2pat_c"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="inst_components∼∈components[{Mdl}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="finite(inst_components[{pc}])">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="inst_components∈components[{Pat}] ↔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_mult_others∈components[{Pat}] ∖ dom(inst_components) → ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀pc⦂Component·pc∈dom(inst_components)⇒finite(inst_components[{pc}])"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="pc∈dom(inst_components)⇒finite(inst_components[{pc}])">
<org.eventb.core.prIdent name="pc" org.eventb.core.type="Component"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r4" 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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="to_clone_c_mult/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p27,p3,p11,p29,p20"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" 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">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="height" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀c⦂Component·c∈components[{Pat}]∩ran(container)⇒height(c)=1+max(height[container∼[{c}]])"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="height∈components[{Pat}] → ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c∈dom(c_index)∧c_index∈Component ⇸ ℤ∧inst2pat_c∈Component ⇸ Component∧inst2pat_c(c)∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀c⦂Component·c∈dom(to_unfold_c_in)⇒c_multiplicity(c)&gt;0"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀c⦂Component·c∈components[{Pat}] ∖ ran(container)⇒height(c)=0"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="ran(to_unfold_c_in)⊆dom(inst2pat_c)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="(inst2pat_c;to_unfold_c_in)∩container=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="∀c⦂Component·finite(to_unfold_c_in[{c}])"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="∀c⦂Component·finite(container∼[{c}])"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/to_clone_c_mult/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component">
<org.eventb.core.lang name="L"/>
<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="p3">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p3" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="c_mult" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀c⦂Component·c∈dom(∅ ⦂ ℙ(Component×Component))⇒(∅ ⦂ ℙ(Component×ℤ))(c)∈1 ‥ c_mult((∅ ⦂ ℙ(Component×Component))(c))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/c_index_ty/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p1,p3,p19,p20,p21,p22,p23,p24,p25"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Z3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="Z3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c_index∪new_c∼∈dom(to_clone_c∪(ran(new_c) × {c})) ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="to_free_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_unfold_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/to_clone_c_mult/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p9,p2,p11,p12,p13,p15,p26,p16,p17,p4,p18,p19,p5,p20,p6,p7,p8,p21,p22,p23,p24,p25"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p14,p10,p3,p1,p9,p2,p11,p12,p13,p15,p16,p17,p4,p18,p19,p5,p20,p6,p7,p8,p21,p22,p23,p24,p25">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀c0⦂Component·c0∈dom(c_index∪new_c∼)⇒(c_index∪new_c∼)(c0)∈1 ‥ (c_multiplicity{Pat ↦ c_multiplicity(Pat)∪(ran(new_c) × {1})})(Pat)((to_clone_c∪(ran(new_c) × {c}))(c0))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/c_index_ty/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="Component">
<org.eventb.core.lang name="L"/>
<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="p7">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p4"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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="p8"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p7" org.eventb.core.prHyps="p2,p1">
<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.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="{c} ⩤ c_index∈dom(to_clone_c) ∖ {c} ⇸ ℕ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="{c} ⩤ c_index∈dom({c} ⩤ to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/to_clone_c_mult/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p4"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p2">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p2" org.eventb.core.prHyps="p2"/>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.1.1.1.1"/>
</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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_clone_c∈components(Inst) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="∀c0⦂Component·c0∈dom(c_index)⇒c_index(c0)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c0))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀c0⦂Component·c0∈dom(c_index)⇒c_index(c0)∈1 ‥ c_multiplicity(Pat)(({c} ⩤ to_clone_c)(c0))"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="comp_finite/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p4">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p2" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p3"/>
<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="p5"/>
<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 name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p7">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p7" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p8">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type 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="r5" 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.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.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p10">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p10" 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.prRule>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="(∀m⦂Model·m∈dom(components))∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="m∈dom(components)">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="m∈Model">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈dom(components)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/comp_finite/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p21" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p24"/>
<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="p25"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p29">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p30">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p24,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p22,p23,p27">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p31">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite of range of a function" org.eventb.core.prGoal="p31" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p32">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p13,p14,p15,p5">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p33">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p34" 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.prAnte name="(" org.eventb.core.prGoal="p35">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p16,p2,p7,p27">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R30000"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p36">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p34" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e0"/>
</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="p38" org.eventb.core.prHyps="p37">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p38" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p39">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p39" org.eventb.core.prHyps="p24,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p37,p20,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="finite(ran(new_c))"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="finite(components(Pat)∪ran(new_c))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="finite(components(Pat))∧finite(ran(new_c))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="finite((components{Pat ↦ components(Pat)∪ran(new_c)})(m))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="finite(1 ‥ c_multiplicity(Pat)(c))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="finite(({Pat} ⩤ components)(m))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="finite(components(m))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ⇸ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="⊤∧⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧c∈dom(c_multiplicity(Pat))∧c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·finite((components{Pat ↦ components(Pat)∪ran(new_c)})(m))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="finite(components(Pat))"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="¬m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="1 ‥ c_multiplicity(Pat)(c) ⇸ Component ∖ union(ran(components))"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.finiteFunRan"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/comp_finite/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p19" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p23"/>
<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="p24"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p25">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p25" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p27" org.eventb.core.prHyps="p26">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p27" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p28">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p29">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p1,p23,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p20,p21,p22,p26">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p30">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Pat)" org.eventb.core.prHyps="p14">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p31">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p31" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p32">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p14"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Pat)" org.eventb.core.prHyps="p12">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p31">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p31" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p29">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite of range of a function" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p33">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p1,p15,p18,p22">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p31">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p31" 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.prAnte name="(" org.eventb.core.prGoal="p35">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p15,p7,p26,p32,p29">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p36">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite set" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p37">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p37" org.eventb.core.prHyps="p13,p21">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p38">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p38" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p31">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p31" 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.prAnte name="(" org.eventb.core.prGoal="p29">
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p29"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p39">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p39" org.eventb.core.prHyps="p15,p7,p26,p32,p29">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e2"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e2"/>
</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="p41" org.eventb.core.prHyps="p40">
<org.eventb.core.prRule name="r13" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p41" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p42">
<org.eventb.core.prRule name="r14" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p42" org.eventb.core.prHyps="p40,p12,p15,p7">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="finite((components{Pat ↦ components(Pat)∪ran(cloned_c)})(m))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·finite((components{Pat ↦ components(Pat)∪ran(cloned_c)})(m))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ⇸ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="finite(({Pat} ⩤ components)(m))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧c∈dom(to_clone_c)∧to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="finite(components(m))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="finite(ran(cloned_c))"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="⊤∧⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="finite((container(Pat))∼[{to_clone_c(c)}])"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="finite(components(Pat)∪ran(cloned_c))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="(container(Pat))∼[{to_clone_c(c)}]⊆components(Pat)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="finite(components(Pat))∧finite(ran(cloned_c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="container(Pat)∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="finite(components(Pat))"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="¬m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e2" org.eventb.core.expression="Pat"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="components(Pat)"/>
<org.eventb.core.prExpr name="e1" org.eventb.core.expression="(container(Pat))∼[{to_clone_c(c)}] ⇸ Component ∖ union(ran(components))"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r14" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r11" org.eventb.core.prRID="org.eventb.core.seqprover.finiteSet:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.allD"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r12" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r13" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.finiteFunRan"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/comp_finite/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p18" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p24">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p25">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p16,p10,p2,p12,p11,p14,p8,p1,p5,p19,p20,p13,p4,p17,p6,p9,p7,p15,p21,p22,p25">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p29">
<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="p16,p10,p2,p12,p11,p14,p8,p1,p5,p19,p20,p13,p4,p17,p6,p9,p7,p15,p21,p22,p27">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</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="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="finite(components(Pat) ∖ {c})"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="¬c∈to_unfold_c"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="finite(({Pat} ⩤ components)(m))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="finite(components(m))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="finite((components{Pat ↦ components(Pat) ∖ {c}})(m))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·finite((components{Pat ↦ components(Pat) ∖ {c}})(m))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="¬m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r4" 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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/comp_finite/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p21" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p34"/>
<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="p35"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p36"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p37" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p38"/>
<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="REWRITE0" org.eventb.core.prHidden="p38" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p39"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p40">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="relational image with ∪ left in goal" org.eventb.core.prGoal="p40" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p41">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p41" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p42">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p42" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p43">
<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="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p44">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="dc (m=Mdl)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p45" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p46">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Mdl" org.eventb.core.prGoal="p44" org.eventb.core.prHyps="p46">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p48">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (ran(new_components)=new_components[components[{Inst}] ∖ dom(inst_components)])" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p45" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p49">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="p31,p23,p17,p6,p46,p13">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p49">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with ran(new_components)=new_components[components[{Inst}] ∖ dom(inst_components)]" org.eventb.core.prGoal="p48" org.eventb.core.prHyps="p49">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p50">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite of relational image of a function" org.eventb.core.prGoal="p50" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p45" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p51">
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p51" org.eventb.core.prHyps="p23"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p52">
<org.eventb.core.prRule name="r13" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Inst)" org.eventb.core.prHyps="p6">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p45" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p53">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p6"/>
<org.eventb.core.prRule name="r14" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite set" org.eventb.core.prGoal="p52" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p45" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p53">
<org.eventb.core.prRule name="r15" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p53" org.eventb.core.prHyps="p53"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p54">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP (trivial)" org.eventb.core.prGoal="p54" org.eventb.core.prHyps="">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e2"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p49"/>
</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.prHyps="p55">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (({Mdl} × ran(new_components))[{m}]=∅)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p45" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p56">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p56" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p57">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p57" org.eventb.core.prHyps="p55,p31,p23,p17,p6,p13">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p56">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with ({Mdl} × ran(new_components))[{m}]=∅" org.eventb.core.prGoal="p44" org.eventb.core.prHyps="p56">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p58">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p58" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p56" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p57"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p45" 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.prPredRef name=".pred" org.eventb.core.prRef="p56"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p46"/>
</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="0"/>
</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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="height" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="finite(({Mdl} × ran(new_components))[{Mdl}])"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="dom(inst_components) ◁ container;inst_components⊆inst_components;container"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="finite(components[{m}]∪({Mdl} × ran(new_components))[{m}])">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀c⦂Component·c∈components[{Pat}] ∖ ran(container)⇒height(c)=0"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="container[dom(inst_components)]⊆dom(inst_components)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="ran(to_unfold_c_in)⊆dom(inst2pat_c)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="finite(components[{m}])">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="(inst2pat_c;to_unfold_c_in)∩container=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="finite(components[{m}])∧finite(({Mdl} × ran(new_components))[{m}])">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="finite(({Mdl} × ran(new_components))[{m}])">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·finite((components∪({Mdl} × ran(new_components)))[{m}])"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p57" org.eventb.core.predicate="¬m∈dom({Mdl} × ran(new_components))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="∀c⦂Component·c∈components[{Pat}]∩ran(container)⇒height(c)=1+max(height[container∼[{c}]])"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="height∈components[{Pat}] → ℕ"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂Component·c∈dom(to_unfold_c_in)⇒c_multiplicity(c)&gt;0"/>
<org.eventb.core.prPred name="p51" org.eventb.core.predicate="new_components∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p55" org.eventb.core.predicate="¬m=Mdl">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="ran(new_components)=new_components[components[{Inst}] ∖ dom(inst_components)]"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p53" org.eventb.core.predicate="finite(components[{Inst}])"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="new_components∈components[{Inst}] ∖ dom(inst_components) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p54" org.eventb.core.predicate="components[{Inst}] ∖ dom(inst_components)⊆components[{Inst}]"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="finite(new_components[components[{Inst}] ∖ dom(inst_components)])"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p52" org.eventb.core.predicate="finite(components[{Inst}] ∖ dom(inst_components))"/>
<org.eventb.core.prPred name="p58" org.eventb.core.predicate="finite(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="∀c⦂Component·finite(to_unfold_c_in[{c}])"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="finite((components∪({Mdl} × ran(new_components)))[{m}])">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="finite(ran(new_components))"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="m=Mdl">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="∀c⦂Component·finite(container∼[{c}])"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="inst_components∈components[{Inst}] ⤔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prPred name="p56" org.eventb.core.predicate="({Mdl} × ran(new_components))[{m}]=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e1" org.eventb.core.expression="Inst"/>
<org.eventb.core.prExpr name="e2" org.eventb.core.expression="Component ⇸ Component"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="components[{Inst}]"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.doCase"/>
<org.eventb.core.prReas name="r12" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r11" org.eventb.core.prRID="org.eventb.core.seqprover.finiteFunRelImg"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.relImgUnionLeftRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.cut"/>
<org.eventb.core.prReas name="r14" org.eventb.core.prRID="org.eventb.core.seqprover.finiteSet:0"/>
<org.eventb.core.prReas name="r13" org.eventb.core.prRID="org.eventb.core.seqprover.allD"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r15" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/to_clone_c/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p3">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p3" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ ℙ(Component×Component))∈({Inst} ⩤ components)[{Inst}] ⇸ ({Inst} ⩤ components)[{Pat}]"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/c_index_ty/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component">
<org.eventb.core.lang name="L"/>
<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="p3">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p3" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ ℙ(Component×ℤ))∈dom(∅ ⦂ ℙ(Component×Component)) → ℕ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/to_free_to_clone_disjoint/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" 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.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP (trivial)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="instanciation_started∈BOOL">
<org.eventb.core.prIdent name="instanciation_started" org.eventb.core.type="BOOL"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_free_c⊆components(Pat)">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components(m))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="dom(∅ ⦂ ℙ(Component×Component))∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_unfold_c⊆components(Pat)">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Pat∈dom(components)">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Mdl∈dom(components)">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/to_free_to_clone_disjoint/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p21,p4,p2,p6,p23,p18,p8,p16,p9,p13,p24,p25,p7,p11,p22,p15,p17,p20,p19,p5,p12"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p14,p10,p3,p1,p21,p4,p2,p6,p23,p18,p8,p16,p9,p13,p24,p25,p7,p11,p22,p15,p17,p20,p19,p5,p12">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="dom(to_clone_c∪(ran(new_c) × {c}))∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/to_free_to_clone_disjoint/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p18,p12,p4,p14,p20,p13,p17,p10,p3,p6,p22,p23,p15,p5,p19,p8,p11,p24,p21,p2"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p7,p16,p9,p1,p18,p12,p4,p14,p20,p13,p17,p10,p3,p6,p22,p23,p15,p5,p19,p8,p11,p24,p21,p2">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="dom(({c} ⩤ to_clone_c)∪cloned_c∼)∩(to_free_c∪{c})=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/to_free_to_clone_disjoint/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="fun. singleton img. in goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<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="∧ goal" 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="hyp" org.eventb.core.prGoal="p2" org.eventb.core.prHyps="p2"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p1">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p1" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p4">
<org.eventb.core.prRule name="r3" 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="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prRule name="r4" 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="p8"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
</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="p10">
<org.eventb.core.prRule name="r3" 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="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prRule name="r4" 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="p8"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
</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="p11">
<org.eventb.core.prRule name="r3" 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="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prRule name="r4" 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="p8"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
</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="0.1.1"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="c∈ran(container(Pat))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="dom(to_clone_c)∩((to_free_c ∖ {c})∪{(container(Pat))∼(c)})=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="c∈dom((container(Pat))∼)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧c∈dom((container(Pat))∼)∧(container(Pat))∼∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="dom(to_clone_c)∩((to_free_c ∖ {c})∪(container(Pat))∼[{c}])=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="instanciation_started∈BOOL">
<org.eventb.core.prIdent name="instanciation_started" org.eventb.core.type="BOOL"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="(container(Pat))∼∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.funSingletonImg"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/to_free_dom_to_clone_disjoint/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" 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"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP (trivial)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_free_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="dom(∅ ⦂ ℙ(Component×Component))∩(components(Pat) ∖ dom(container(Pat)))=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_unfold_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Mdl∈dom(components)">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/to_free_dom_to_clone_disjoint/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p9,p2,p11,p12,p13,p15,p26,p16,p17,p4,p18,p19,p5,p20,p6,p7,p8,p21,p22,p23,p24,p25"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p14,p10,p3,p1,p9,p2,p11,p12,p13,p15,p16,p17,p4,p18,p19,p5,p20,p6,p7,p8,p21,p22,p23,p24,p25">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="dom(to_clone_c∪(ran(new_c) × {c}))∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/to_free_dom_to_clone_disjoint/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p8,p25,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21,p22,p23,p24"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p7,p16,p9,p1,p2,p3,p4,p5,p6,p8,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21,p22,p23,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="dom(({c} ⩤ to_clone_c)∪cloned_c∼)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/to_free_dom_to_clone_disjoint/INV" org.eventb.core.confidence="0" 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="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p16" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p20"/>
<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="p21"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∪ / ∩ distribution 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="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="fun. singleton img. in goal" org.eventb.core.prGoal="p22" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p23">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p23" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="p17"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p15">
<org.eventb.core.prRule name="r5" 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="p24">
<org.eventb.core.prRule name="r0" 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="p25"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="*" org.eventb.core.prGoal="p26"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p27">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p27" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p28">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p29">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p20,p1,p2,p3,p4,p6,p7,p8,p9,p10,p11,p12,p14,p15,p18,p19,p17"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p20,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p18,p19,p17">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="p30"/>
</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="0.1.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0.1"/>
</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="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="dom(to_clone_c)∩((to_free_c ∖ {c})∪(container(Pat))∼[{c}])=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="(dom(to_clone_c)∩(to_free_c ∖ {c}))∪(dom(to_clone_c)∩{(container(Pat))∼(c)})=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="c∈dom((container(Pat))∼)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="¬(container(Pat))∼(c)∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c⊆{c}"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="(container(Pat))∼∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c⊆{c}∧¬(container(Pat))∼(c)∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="c∈ran(container(Pat))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="(dom(to_clone_c)∩(to_free_c ∖ {c}))∪(dom(to_clone_c)∩(container(Pat))∼[{c}])=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)∧c∈dom((container(Pat))∼)∧(container(Pat))∼∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.funSingletonImg"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.unionInterDistRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/to_unfold_dom_to_clone_disjoint/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" 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.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP (trivial)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="instanciation_started∈BOOL">
<org.eventb.core.prIdent name="instanciation_started" org.eventb.core.type="BOOL"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_free_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="dom(∅ ⦂ ℙ(Component×Component))∩(components(Pat) ∖ dom(container(Pat)))=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_unfold_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Mdl∈dom(components)">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/to_unfold_dom_to_clone_disjoint/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p22,p4,p2,p6,p24,p18,p8,p16,p9,p13,p25,p26,p7,p11,p23,p14,p17,p15,p20,p19,p5,p12"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p21,p10,p3,p1,p22,p4,p2,p6,p24,p18,p8,p16,p9,p13,p25,p26,p7,p11,p23,p14,p17,p15,p20,p19,p5,p12">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="dom(to_clone_c∪(ran(new_c) × {c}))∩(to_unfold_c ∖ {c})=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="dom(to_clone_c)∩to_unfold_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/to_unfold_dom_to_clone_disjoint/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prHyps="">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p0" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p1"/>
<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="p2"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p3"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="instanciation_started∈BOOL">
<org.eventb.core.prIdent name="instanciation_started" org.eventb.core.type="BOOL"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="end_instanciation/p_WD/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p2,p20,p14,p4,p17,p22,p15,p19,p12,p3,p7,p23,p24,p18,p6,p21,p8,p13,p5,p9"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p10,p1,p11,p16,p2,p20,p14,p4,p17,p22,p15,p19,p12,p3,p7,p23,p24,p18,p6,p21,p8,p13,p5,p9">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="instanciation_started" org.eventb.core.type="BOOL"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="instanciation_started=TRUE"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_unfold_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_clone_c=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="instanciation_started∈BOOL"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/to_free_to_unfold_disjoint/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" 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"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP (trivial)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(components(Pat) ∖ dom(container(Pat)))∩(∅ ⦂ ℙ(Component))=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_free_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_unfold_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Mdl∈dom(components)">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/to_free_to_unfold_disjoint/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p22,p4,p2,p6,p24,p19,p8,p17,p9,p13,p25,p26,p7,p11,p23,p14,p18,p15,p21,p20,p5,p12"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p16,p10,p3,p1,p22,p4,p2,p6,p24,p19,p8,p17,p9,p13,p25,p26,p7,p11,p23,p14,p18,p15,p21,p20,p5,p12">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(to_unfold_c ∖ {c})∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/to_free_to_unfold_disjoint/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p19,p4,p2,p5,p21,p17,p7,p15,p9,p11,p23,p24,p6,p10,p20,p12,p16,p13,p25,p22,p8"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p14,p18,p3,p1,p19,p4,p2,p5,p21,p17,p7,p15,p9,p11,p23,p24,p6,p10,p20,p12,p16,p13,p25,p22,p8">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="((to_unfold_c ∖ {c})∪ran(cloned_c))∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/to_free_to_unfold_disjoint/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prHyps="">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p0" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p1"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p2" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p3"/>
<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="p4"/>
</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="¬c∈to_unfold_c">
<org.eventb.core.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c∉to_unfold_c">
<org.eventb.core.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/to_free_c/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" 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"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP (trivial)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="components(Pat) ∖ dom(container(Pat))⊆components(Pat)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_unfold_c⊆components(Pat)">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Mdl∈dom(components)">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/cm/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p4,p5,p6,p7,p8,p24,p9,p10,p11,p12,p13,p14,p15,p16,p17,p19,p20,p21,p22,p23"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p18,p3,p1,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p19,p20,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c_multiplicity{Pat ↦ {c} ⩤ c_multiplicity(Pat)}∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/to_clone_c_mult/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p4,p5,p6,p8,p22,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p7,p16,p3,p1,p2,p4,p5,p6,p8,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀c0⦂Component·c0∈dom(c_index)⇒c_index(c0)∈1 ‥ (c_multiplicity{Pat ↦ {c} ⩤ c_multiplicity(Pat)})(Pat)(to_clone_c(c0))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/c_mult/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p4,p5,p6,p7,p8,p22,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p16,p3,p1,p2,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p17,p18,p19,p20,p21">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∉to_unfold_c"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/to_free_c/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p2,p3,p4,p6,p7,p8,p9,p24,p10,p11,p12,p13,p14,p15,p16,p17,p19,p20,p21,p22,p23"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p18,p1,p5,p2,p3,p4,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p19,p20,p21,p22,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_mult_others" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_free_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="inst_components∼∈components(Mdl) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)∧Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c_mult_others∈components(Pat) ∖ dom(inst_components) → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="dom(to_clone_c)∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c∩to_free_c=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="inst_components∈components(Pat) ↔ components(Mdl)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="to_unfold_c_in/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p2" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p3"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/>
<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="p6"/>
<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="p7">
<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="p7" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p8">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type 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="r4" 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.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="p10">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p12" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p9">
<org.eventb.core.prRule name="r4" 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.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.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)∧Inst∈dom(components)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pat∈Model"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Inst∈Model"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Inst∈dom(components)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/inst_root/WD"/>
<org.eventb.core.prProof name="unfold_c/to_unfold_c_in/INV"/>
<org.eventb.core.prProof name="clone_c/to_unfold_c_in/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p29,p20,p22,p23,p25,p26,p27,p28"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" 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">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="to_clone_c⊆inst2pat_c"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_c_in∪(container∼[{to_clone_c(c)}] × {c})∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/to_unfold_c_in/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<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="p8"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p10"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p4,p5,p3,p2">
<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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="container[dom(inst_components)]⊆dom(inst_components)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="containers∈Component ↔ Component">
<org.eventb.core.prIdent name="containers" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_c_in∈(components∪({Mdl} × ran(new_components)))[{Pat}] ↔ (components∪({Mdl} × ran(new_components)))[{Inst}]"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="dom(inst_components) ◁ container;inst_components⊆inst_components;container"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="inst_components∈components[{Inst}] ⤔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="new_components∈components[{Inst}] ∖ dom(inst_components) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/comp/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p3" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p4"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p5,p4,p6,p7,p8,p9,p10,p11,p12,p13,p1,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Z3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="Z3"/>
</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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Inst∈dom(components)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_clone_c∈components(Inst) ⇸ components(Pat)">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_unfold_c_in∈components(Pat) ⇸ components(Inst)">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Mdl∈dom(components)">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="components{Inst ↦ (∅ ⦂ ℙ(Component))}∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Inst∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(components)">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c⊆components(Pat)">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pat∈dom(container)">
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/comp_finite/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p21" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p37"/>
<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="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="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p41">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p41" org.eventb.core.prHyps="p33,p10,p36,p5,p8,p12,p3,p34,p20,p28,p4,p29,p17,p19,p9,p25,p6,p35,p1,p22,p15,p14,p7,p18,p27,p2,p30,p26,p11,p32,p16,p13,p24,p23,p31,p37">
<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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_mult" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_mult_others" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="containers" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="finite(({Inst} ⩤ components)[{m}])">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="container⊆containers"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀c⦂Component·c∈dom(to_unfold_c_in)⇒c_multiplicity(c)&gt;0"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀s⦂Component,c⦂Component·s ↦ c∈container⇒containers∼[{s}]⊂containers∼[{c}]"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="inst_components∼∈components[{Mdl}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="inst_components∈components[{Pat}] ↔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="containers∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="ran(to_unfold_c_in)⊆dom(inst2pat_c)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c_mult=c_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="c_mult_others∈components[{Pat}] ∖ dom(inst_components) → ℕ"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="(inst2pat_c;to_unfold_c_in)∩container=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="containers∈Component ↔ Component"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="∀c⦂Component·finite(containers∼[{c}])"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="containers;containers⊆containers"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="∀c⦂Component·finite(to_unfold_c_in[{c}])"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="∀pc⦂Component·pc∈dom(inst_components)⇒finite(inst_components[{pc}])"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·finite(({Inst} ⩤ components)[{m}])"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="∀c⦂Component·finite(container∼[{c}])"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r3" 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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/comp_disj/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p2,p28,p10,p30,p19,p31,p7,p4,p20,p6,p18,p12,p25,p21,p8,p29,p14,p1,p22,p16,p15,p3,p5,p26,p11,p27"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p9,p17,p13,p23,p24,p2,p28,p10,p30,p19,p31,p7,p4,p20,p6,p18,p12,p25,p21,p8,p29,p14,p1,p22,p16,p15,p3,p5,p26,p11,p27">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_mult_others" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="pat_roots" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="inst_components∼∈components[{Mdl}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="to_clone_c⊆inst2pat_c"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="inst_components∈components[{Pat}] ↔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="({Inst} ⩤ components)∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c_mult_others∈components[{Pat}] ∖ dom(inst_components) → ℕ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="pat_roots=components[{Pat}] ∖ dom(container)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/cont_ctr/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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="REWRITE2" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<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="REWRITE0" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p3,p2,p4">
<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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c_mult_others" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="inst_components∈components[{Pat}] ↔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="{Inst} ⩤ components;(components[{Inst}] ⩤ container);({Inst} ⩤ components)∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="inst_components∼∈components[{Mdl}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="c_mult_others∈components[{Pat}] ∖ dom(inst_components) → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/to_unfold_c_in/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p3">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p1" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p2"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p3" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ ℙ(Component×Component))∈({Inst} ⩤ components)[{Pat}] ↔ ({Inst} ⩤ components)[{Inst}]"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/pat_root/WD"/>
<org.eventb.core.prProof name="free_c/to_unfold_c_in/INV"/>
<org.eventb.core.prProof name="instanciate_pattern/pat_roots/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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,p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p5">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p5" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p10">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p10" 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="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(components)∧components∈Model ⇸ ℙ(Component)∧Pat∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="⊤∧⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈dom(container)"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/cont_ty/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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p28,p29,p5,p6,p7,p8,p9,p10,p30,p12,p13,p15,p16,p17,p31,p18,p21,p22,p23,p24,p25,p26,p27"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" 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.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_mult" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_mult_others" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="inst_components∼∈components[{Mdl}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="to_clone_c⊆inst2pat_c">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="inst_components∈components[{Pat}] ↔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c_mult=c_mult_others{pc⦂Component·pc∈dom(inst_components) ∣ pc ↦ card(inst_components[{pc}])}"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="c_mult_others∈components[{Pat}] ∖ dom(inst_components) → ℕ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="components[{Inst}] ⩤ container∈ran({Inst} ⩤ components) ⇸ ran({Inst} ⩤ components)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/acycl/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p10">
<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="REWRITE2" org.eventb.core.prHidden="p2" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p12" org.eventb.core.prHyps="p1,p3,p11,p4">
<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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c_mult_others" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="inst_components∈components[{Pat}] ↔ components[{Mdl}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·components[{Inst}] ⩤ container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧components[{Inst}] ⩤ container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="c_mult_others∈components[{Pat}] ∖ dom(inst_components) → ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧components[{Inst}] ⩤ container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="inst_components∼∈components[{Mdl}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/new_c_ty/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" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p23,p24,p25,p26,p27,p28,p14,p29,p30,p31,p32,p33,p18,p34,p35,p21,p36,p37,p38,p39"/>
<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="REWRITE0" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p40"/>
<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="p23"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p41"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p42" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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="REWRITE0" org.eventb.core.prHidden="p43" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p44"/>
<org.eventb.core.prRule name="r3" 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="p45">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p4,p6,p46,p47,p8,p9,p10,p11,p12,p13,p15,p44,p16,p17,p48,p19,p20,p40,p22"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∃ hyp (∃f·container⊆f∧f;f⊆f∧id∩f=∅)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p44" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p49,p50,p51">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prHypAction>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p49,p50,p51"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p40,p22">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="p52">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p52" org.eventb.core.prHyps="p17"/>
</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.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="container⊆f">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="∀m⦂Model·finite(components(m))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="to_clone_c∈components(Inst) ⇸ components(Pat)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="to_clone_c⊆inst2pat_c">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="to_unfold_c_in∈components(Pat) ⇸ components(Inst)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p52" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="components∈Model → ℙ(Component)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p51" org.eventb.core.predicate="f;f⊆f">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Inst∈dom(components)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="Pat∈dom(components)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="to_unfold_c⊆components(Pat)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.exF"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/comp/INV" 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="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/>
<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="p6"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p1,p2">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="components{Inst ↦ components(Inst)∪ran(new_c)}∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/comp_finite/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<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="p11"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p12" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="p13">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<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="∧ goal" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16">
<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="REWRITE0" org.eventb.core.prHidden="p17" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p18"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Inst)" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p19" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p16">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p16"/>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e0"/>
</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="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite of range of a function" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p21">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="p7,p1,p2,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p22">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p22" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p19" 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.prAnte name="(" org.eventb.core.prGoal="p23">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p23" org.eventb.core.prHyps="p8,p13,p4,p5">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R30000"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p24">
<org.eventb.core.prRule name="r0" 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="p19">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p19" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e1"/>
</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="p26" org.eventb.core.prHyps="p25">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p6">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p27">
<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="REWRITE0" org.eventb.core.prHidden="p17" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p18"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst m)" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p19" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p27">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p27" org.eventb.core.prHyps="p27"/>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e2"/>
</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="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="finite(ran(new_c))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="finite(1 ‥ c_multiplicity(Pat)(c))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="finite(components(Inst))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="finite(components(m))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="¬m=Inst">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ⇸ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="⊤∧⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·finite((components{Inst ↦ components(Inst)∪ran(new_c)})(m))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="finite((components{Inst ↦ components(Inst)∪ran(new_c)})(m))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Pat∈dom(c_multiplicity)∧c_multiplicity∈Model ⇸ ℙ(Component × ℤ)∧c∈dom(c_multiplicity(Pat))∧c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="finite(components(Inst))∧finite(ran(new_c))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="finite(({Inst} ⩤ components)(m))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="m=Inst">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="finite(components(Inst)∪ran(new_c))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prExpr name="e1" org.eventb.core.expression="1 ‥ c_multiplicity(Pat)(c) ⇸ Component ∖ union(ran(components))"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Inst"/>
<org.eventb.core.prExpr name="e2" org.eventb.core.expression="m">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prExpr>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r11" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.allD"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.finiteFunRan"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/comp_disj/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p2,p27,p11,p30,p19,p31,p8,p5,p20,p7,p17,p13,p23,p21,p9,p29,p14,p1,p22,p16,p15,p3,p6,p24,p12,p26,p28,p25"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p10,p18,p4,p2,p27,p11,p30,p19,p31,p8,p5,p20,p7,p17,p13,p23,p21,p9,p29,p14,p1,p22,p16,p15,p3,p6,p24,p12,p26,p28,p25">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(components∪({Inst} × ran(new_c)))∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="to_clone_c⊆inst2pat_c"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/cont_ctr/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p3,p4,p7,p30,p31,p8,p9,p10,p11,p12,p13,p32,p14,p15,p16,p19,p33,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" 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.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="card(ran(new_c))=c_multiplicity(c)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="finite(ran(new_c))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="to_clone_c⊆inst2pat_c">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(components∪({Inst} × ran(new_c)));container;(components∪({Inst} × ran(new_c)))∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/cm_ctr/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p22" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p40"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p35" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p41"/>
<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="p42"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p43">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="p44">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="p46">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Inst" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="p46">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p49">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p44" org.eventb.core.prInfHyps="p48"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p44"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="p31,p8,p33,p4,p12,p27,p15,p36,p32,p20,p25,p16,p37,p13,p10,p17,p38,p29,p18,p1,p39,p34,p26,p7,p19,p2,p5,p23,p14,p11,p3,p21,p6,p30,p28,p9,p24,p40,p41,p44,p46,p48">
<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="p51" org.eventb.core.prHyps="p50">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p51" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p52">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p52" org.eventb.core.prHyps="p25,p21,p6,p44,p50">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container(Pat)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="c_multiplicity(Inst)∈components(Inst)∪ran(new_c) → ℕ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="m∈Pattern⇒c_multiplicity(m)∈(components{Inst ↦ components(Inst)∪ran(new_c)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_clone_c∈components(Inst) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_clone_c⊆inst2pat_c"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="¬m=Inst">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈(components{Inst ↦ components(Inst)∪ran(new_c)})(m) → ℕ"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="m∈Pattern">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="inst2pat_c;container(Pat)=container(Inst);inst2pat_c"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="c_multiplicity(m)∈(components{Inst ↦ components(Inst)∪ran(new_c)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p51" org.eventb.core.predicate="c_multiplicity(m)∈({Inst} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="inst2pat_c∈components(Inst) → components(Pat)"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="Inst∈Pattern"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="∀m⦂Model·container(m)∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="to_unfold_c∩dom(container(Pat))=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Inst∈dom(components)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Inst∈dom(container)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_unfold_c_in∈components(Pat) ↔ components(Inst)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container(Pat))"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p52" org.eventb.core.predicate="c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="c_multiplicity(m)∈components(Inst)∪ran(new_c) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="m=Inst">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·f∈components(m) ↔ components(m)∧container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r6" 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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/to_unfold_c_in/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<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="p8"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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="REWRITE0" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p12"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p5,p4,p3,p2">
<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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="card(ran(new_c))=c_multiplicity(c)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="finite(ran(new_c))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_c_in∈(components∪({Inst} × ran(new_c)))[{Pat}] ↔ (components∪({Inst} × ran(new_c)))[{Inst}]"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/to_clone_c/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p19,p20,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC4" 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">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC4"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="to_clone_c⊆inst2pat_c"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_clone_c∪(ran(new_c) × {c})∈(components∪({Inst} × ran(new_c)))[{Inst}] ⇸ (components∪({Inst} × ran(new_c)))[{Pat}]"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/c_index_ty/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="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,p4,p30,p31"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC4" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p4,p1,p2,p3">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC4"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_clone_c⊆inst2pat_c">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]">
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Inst∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c_index∪new_c∼∈dom(inst2pat_c∪(ran(new_c) × {c})) → ℕ"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/to_clone_c_mult/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p3,p4,p7,p30,p31,p8,p9,p10,p11,p12,p13,p32,p14,p15,p16,p18,p19,p33,p20,p21,p22,p23,p25,p26,p27,p28,p29"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" 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.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="card(ran(new_c))=c_multiplicity(c)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="finite(ran(new_c))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀c0⦂Component·c0∈dom(inst2pat_c∪(ran(new_c) × {c}))⇒(c_index∪new_c∼)(c0)∈1 ‥ c_multiplicity((inst2pat_c∪(ran(new_c) × {c}))(c0))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="to_clone_c⊆inst2pat_c">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/to_unfold_c/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<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="p8"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p10"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p5,p4,p3,p2,p1">
<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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_c ∖ {c}⊆(components∪({Inst} × ran(new_c)))[{Pat}]"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="card(ran(new_c))=c_multiplicity(c)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="containers∈Component ↔ Component">
<org.eventb.core.prIdent name="containers" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="finite(ran(new_c))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/new_c_model/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p8">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p8" 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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Inst∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst∈dom(components)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/new_c_ty/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="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p24,p25,p26,p27,p28,p29,p13,p30,p31,p32,p33,p34,p17,p35,p36,p21,p37,p38,p39,p40"/>
<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="REWRITE0" org.eventb.core.prHidden="p38" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p41"/>
<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="p24"/>
<org.eventb.core.prRule name="r3" 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="p42">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p43,p44,p45,p7,p8,p9,p10,p11,p12,p14,p15,p16,p46,p19,p20,p22,p23"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p42" 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.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="p47">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p43,p44,p45,p7,p8,p9,p10,p11,p12,p14,p15,p16,p46,p19,p20,p22,p23"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="p16"/>
</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.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="dest" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="components∈Model → ℙ(Component)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="Inst∈dom(components)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="∀m⦂Model·finite(components(m))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="to_clone_c∈components(Inst) ⇸ components(Pat)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="to_clone_c⊆inst2pat_c">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="to_unfold_c_in∈components(Pat) ⇸ components(Inst)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="∀c⦂Component·c∈dom(c_index)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(to_clone_c(c))">
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c ↦ dest∈to_unfold_c_in"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="Pat∈dom(components)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="to_unfold_c⊆components(Pat)">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/comp/INV" 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="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/>
<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="p6"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p1,p3">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="dest" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="components{Inst ↦ components(Inst)∪ran(new_c)}∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c ↦ dest∈to_unfold_c_in"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/comp_finite/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p22" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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="p37"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p38"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p39" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p40"/>
<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="REWRITE0" org.eventb.core.prHidden="p40" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p41"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p42">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="relational image with ∪ left in goal" org.eventb.core.prGoal="p42" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p43">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p44">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p44" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p45" 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,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p46">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="dc (m=Inst)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p47" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p48">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Inst" org.eventb.core.prGoal="p46" org.eventb.core.prHyps="p48">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p49">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (ran(new_c)=new_c[1 ‥ c_multiplicity(c)])" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p50">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p50" org.eventb.core.prHyps="p28,p32">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p51">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p51" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p47" 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.prAnte name="(" org.eventb.core.prGoal="p52" org.eventb.core.prHyps="p28,p32">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p52" org.eventb.core.prHyps="p48,p32,p34,p9,p7,p28">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p28,p52,p32">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with ran(new_c)=new_c[1 ‥ c_multiplicity(c)]" org.eventb.core.prGoal="p4" org.eventb.core.prHyps="p52">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p53">
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite of relational image of a function" org.eventb.core.prGoal="p53" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p50">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p50" org.eventb.core.prHyps="p28,p32">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p51">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p51" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p47" 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.prAnte name="(" org.eventb.core.prGoal="p54">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p54" org.eventb.core.prHyps="p7,p28,p52,p48,p32,p34,p9">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p55">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p55" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p47" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p52"/>
</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.prHyps="p56">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (({Inst} × ran(new_c))[{m}]=∅)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p47" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p57">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p57" org.eventb.core.prHyps="p34,p56,p9,p7">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p57">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with ({Inst} × ran(new_c))[{m}]=∅" org.eventb.core.prGoal="p46" org.eventb.core.prHyps="p57">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p58">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p58" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p57" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p59"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p47" 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.prPredRef name=".pred" org.eventb.core.prRef="p57"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p48"/>
</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="0"/>
</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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="dest" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="height" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p51" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="finite(ran(new_c))"/>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="finite(({Inst} × ran(new_c))[{Inst}])"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p53" org.eventb.core.predicate="finite(new_c[1 ‥ c_multiplicity(c)])"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p55" org.eventb.core.predicate="finite(1 ‥ c_multiplicity(c))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p56" org.eventb.core.predicate="¬m=Inst">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="∀c⦂Component·c∈components[{Pat}] ∖ ran(container)⇒height(c)=0"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="ran(to_unfold_c_in)⊆dom(inst2pat_c)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="finite(components[{m}])">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p57" org.eventb.core.predicate="({Inst} × ran(new_c))[{m}]=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="(inst2pat_c;to_unfold_c_in)∩container=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="finite(({Inst} × ran(new_c))[{m}])">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="c ↦ dest∈to_unfold_c_in"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p54" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ⇸ Component"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="card(ran(new_c))=c_multiplicity(c)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀c⦂Component·c∈components[{Pat}]∩ran(container)⇒height(c)=1+max(height[container∼[{c}]])"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="finite(components[{m}])∧finite(({Inst} × ran(new_c))[{m}])">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="finite((components∪({Inst} × ran(new_c)))[{m}])">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="finite(components[{m}]∪({Inst} × ran(new_c))[{m}])">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="height∈components[{Pat}] → ℕ"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀c⦂Component·c∈dom(to_unfold_c_in)⇒c_multiplicity(c)&gt;0"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="c∈dom(c_multiplicity)∧c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p59" org.eventb.core.predicate="¬m∈dom({Inst} × ran(new_c))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·finite((components∪({Inst} × ran(new_c)))[{m}])"/>
<org.eventb.core.prPred name="p58" org.eventb.core.predicate="finite(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="∀c⦂Component·finite(to_unfold_c_in[{c}])"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="∀c⦂Component·finite(container∼[{c}])"/>
<org.eventb.core.prPred name="p52" org.eventb.core.predicate="ran(new_c)=new_c[1 ‥ c_multiplicity(c)]"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="m=Inst">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="1 ‥ c_multiplicity(c) ⇸ Component"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.doCase"/>
<org.eventb.core.prReas name="r12" org.eventb.core.prRID="org.eventb.core.seqprover.finiteFunRelImg"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.relImgUnionLeftRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.cut"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r11" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/comp_disj/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p2,p26,p11,p30,p18,p31,p8,p5,p19,p7,p17,p13,p22,p20,p9,p29,p14,p1,p21,p16,p15,p3,p6,p23,p12,p25,p27,p24"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p10,p28,p4,p2,p26,p11,p30,p18,p31,p8,p5,p19,p7,p17,p13,p22,p20,p9,p29,p14,p1,p21,p16,p15,p3,p6,p23,p12,p25,p27,p24">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="dest" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(components∪({Inst} × ran(new_c)))∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="to_clone_c⊆inst2pat_c"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="c ↦ dest∈to_unfold_c_in"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/cont_ctr/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p3,p4,p7,p30,p31,p8,p9,p10,p11,p12,p13,p32,p14,p15,p16,p18,p33,p19,p20,p21,p22,p23,p24,p25,p27,p28,p29"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" 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.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="dest" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="card(ran(new_c))=c_multiplicity(c)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="finite(ran(new_c))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="to_clone_c⊆inst2pat_c">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(components∪({Inst} × ran(new_c)));(container∪(ran(new_c) × {dest}));(components∪({Inst} × ran(new_c)))∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="c ↦ dest∈to_unfold_c_in"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/cm_ctr/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p21" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p40"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p35" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p41"/>
<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="p42"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p43">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="p44">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="p46">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Inst" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="p46">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p49">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p44" org.eventb.core.prInfHyps="p48"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p44"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="p30,p8,p33,p4,p12,p26,p15,p36,p31,p20,p24,p16,p37,p13,p10,p17,p38,p28,p18,p1,p39,p34,p25,p7,p19,p2,p5,p22,p14,p11,p3,p32,p6,p29,p27,p9,p23,p40,p41,p44,p46,p48">
<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="p51" org.eventb.core.prHyps="p50">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p51" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p52">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p52" org.eventb.core.prHyps="p24,p32,p6,p44,p50">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
</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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="dest" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container(Pat)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="c_multiplicity(Inst)∈components(Inst)∪ran(new_c) → ℕ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(Pat)(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="m∈Pattern⇒c_multiplicity(m)∈(components{Inst ↦ components(Inst)∪ran(new_c)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·container(m)∈components(m) ⇸ components(m)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_clone_c∈components(Inst) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_clone_c⊆inst2pat_c"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="¬m=Inst">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="c_multiplicity∈Pattern → (Component ⇸ ℕ)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈(components{Inst ↦ components(Inst)∪ran(new_c)})(m) → ℕ"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="m∈Pattern">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="inst2pat_c;container(Pat)=container(Inst);inst2pat_c"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="c_multiplicity(m)∈(components{Inst ↦ components(Inst)∪ran(new_c)})(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p51" org.eventb.core.predicate="c_multiplicity(m)∈({Inst} ⩤ components)(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="inst2pat_c∈components(Inst) → components(Pat)"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="Inst∈Pattern"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="∀m⦂Model·container(m)∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="c ↦ dest∈to_unfold_c_in"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="¬Inst=Mdl"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="to_unfold_c∩dom(container(Pat))=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Inst∈dom(components)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Inst∈dom(container)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="to_unfold_c_in∈components(Pat) ↔ components(Inst)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container(Pat))"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p52" org.eventb.core.predicate="c_multiplicity(m)∈components(m) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="c_multiplicity(m)∈components(Inst)∪ran(new_c) → ℕ">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="m=Inst">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·f∈components(m) ↔ components(m)∧container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="Pat∈dom(container)"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r6" 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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/to_unfold_c_in/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<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="p8"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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="REWRITE0" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p12"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p5,p4,p3,p2">
<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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="dest" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="card(ran(new_c))=c_multiplicity(c)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="finite(ran(new_c))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·⊤∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c ↦ dest∈to_unfold_c_in"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_c_in ∖ {c ↦ dest}∈(components∪({Inst} × ran(new_c)))[{Pat}] ↔ (components∪({Inst} × ran(new_c)))[{Inst}]"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/to_clone_c/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p2,p18,p5,p19,p20,p21,p22,p23,p24,p1,p25,p26,p27,p28,p29,p6,p30,p31"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Z3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="Z3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="dest" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_clone_c⊆inst2pat_c"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_clone_c∪(ran(new_c) × {c})∈(components∪({Inst} × ran(new_c)))[{Inst}] ⇸ (components∪({Inst} × ran(new_c)))[{Pat}]"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="c ↦ dest∈to_unfold_c_in"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Inst∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/c_index_ty/INV" 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="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="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,p3,p29,p30"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Z3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="Z3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_clone_c⊆inst2pat_c">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]">
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="Inst∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c_index∪new_c∼∈dom(inst2pat_c∪(ran(new_c) × {c})) → ℕ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/to_clone_c_mult/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" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p3,p4,p7,p30,p31,p8,p9,p10,p11,p12,p13,p32,p14,p15,p16,p17,p18,p33,p19,p20,p21,p22,p24,p25,p27,p28,p29"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" 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.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="dest" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="card(ran(new_c))=c_multiplicity(c)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="finite(ran(new_c))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀c0⦂Component·c0∈dom(inst2pat_c∪(ran(new_c) × {c}))⇒(c_index∪new_c∼)(c0)∈1 ‥ c_multiplicity((inst2pat_c∪(ran(new_c) × {c}))(c0))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="to_clone_c⊆inst2pat_c">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Inst≠Mdl"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="c ↦ dest∈to_unfold_c_in"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="Inst∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/to_unfold_c/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<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="p8"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p10"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p5,p4,p3,p2,p1">
<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.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="dest" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="card(ran(new_c))=c_multiplicity(c)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="containers∈Component ↔ Component">
<org.eventb.core.prIdent name="containers" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="finite(ran(new_c))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="c ↦ dest∈to_unfold_c_in"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_c⊆(components∪({Inst} × ran(new_c)))[{Pat}]"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/new_c_model/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p8">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p8" 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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Inst∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst∈dom(components)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/cont_ty/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5" org.eventb.core.prSets="Component,Model">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p4,p22,p23,p1,p24,p25,p26,p27,p28,p29,p30,p31"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Z3" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p5,p2,p3,p4">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="Z3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="dest" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container">
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="to_unfold_c∩dom(to_unfold_c_in)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="container∈ran(components) ⇸ ran(components)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="to_unfold_c∩ran(to_clone_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈Component ↔ Component∧container⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m⦂Model·finite(components[{m}])"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_unfold_c⊆components[{Pat}]">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="components∼∈Component ⇸ Model"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="container∪(ran(new_c) × {dest})∈ran(components∪({Inst} × ran(new_c))) ⇸ ran(components∪({Inst} × ran(new_c)))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Pat∈Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c_index∈dom(inst2pat_c) → ℕ">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="c_multiplicity∈components[Pattern] → ℕ">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_clone_c⊆inst2pat_c">
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="to_unfold_c∩dom(container)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="container∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="components;container;components∼⊆(id ⦂ ℙ(Model×Model))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]">
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="to_unfold_c∩ran(inst2pat_c)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in∈components[{Pat}] ↔ components[{Inst}]"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="inst2pat_c;container=container;inst2pat_c">
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="c_multiplicity∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="∀c⦂Component·c∈dom(inst2pat_c)⇒c_index(c)∈1 ‥ c_multiplicity(inst2pat_c(c))">
<org.eventb.core.prIdent name="c_index" org.eventb.core.type="ℙ(Component×ℤ)"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="Mdl∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="c∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c ↦ dest∈to_unfold_c_in"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="inst2pat_c∈components[{Inst}] → components[{Pat}]">
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="Inst∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="components∈Model ↔ Component"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/acycl/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="f,m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<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="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p7" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="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="p9"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p10">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst m)" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p12">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∃ hyp (∃f·f∈components(m) ↔ components(m)∧container(m)⊆f∧f;f⊆f∧id∩f=∅)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p12" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p13,p14,p15,p16">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prHypAction>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p13,p14,p15,p16"/>
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="dc (m=Inst)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Inst" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="p17">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p20">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p18"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p13" org.eventb.core.prInfHyps="p19"/>
<org.eventb.core.prHypAction name="DESELECT2" org.eventb.core.prHyps="p15,p13"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p21">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∃ goal (inst ((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f)" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p22">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p22" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p23">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p23" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p24">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="p14,p19,p1,p2,p17,p3,p18,p16">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p25">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p25" org.eventb.core.prHyps="p14,p19,p1,p2,p17,p3,p18,p16">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p26">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p14,p19,p1,p2,p17,p3,p18,p16">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="*" org.eventb.core.prGoal="p27">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p27" org.eventb.core.prHyps="p14,p19,p1,p2,p17,p3,p18,p16">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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.prExprRef name=".exprs" org.eventb.core.prRef="e0"/>
</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.prHyps="p28">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="p13,p14,p2,p3,p28,p15,p16">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e1"/>
</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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="c_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Component×ℤ))"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prIdent name="dest" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="new_c" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prIdent name="to_unfold_c_in" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈components(Inst)∪ran(new_c) ↔ components(Inst)∪ran(new_c)∧container(Inst)⊆f∧ran(new_c) × {dest}⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·f∈(components{Inst ↦ components(Inst)∪ran(new_c)})(m) ↔ (components{Inst ↦ components(Inst)∪ran(new_c)})(m)∧(container{Inst ↦ container(Inst)∪(ran(new_c) × {dest})})(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f∈components(Inst)∪ran(new_c) ↔ components(Inst)∪ran(new_c)∧container(Inst)⊆((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f∧ran(new_c) × {dest}⊆((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f∧(((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f);(((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f)⊆((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f∧(id ⦂ ℙ(Component×Component))∩(((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f)=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f∈components(Inst)∪ran(new_c) ↔ components(Inst)∪ran(new_c)∧container(Inst)⊆((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f∧(((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f);(((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f)⊆((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f∧(id ⦂ ℙ(Component×Component))∩(((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f)=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="container(Inst)⊆((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="f;f⊆f">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_c_in∈components(Pat) ↔ components(Inst)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="f∈components(Inst) ↔ components(Inst)">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="¬m=Inst">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f∈components(Inst)∪ran(new_c) ↔ components(Inst)∪ran(new_c)">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="container(m)⊆f">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈(components{Inst ↦ components(Inst)∪ran(new_c)})(m) ↔ (components{Inst ↦ components(Inst)∪ran(new_c)})(m)∧(container{Inst ↦ container(Inst)∪(ran(new_c) × {dest})})(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈(components{Inst ↦ components(Inst)∪ran(new_c)})(Inst) ↔ (components{Inst ↦ components(Inst)∪ran(new_c)})(Inst)∧(container{Inst ↦ container(Inst)∪(ran(new_c) × {dest})})(Inst)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="(((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f);(((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f)⊆((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∃f⦂ℙ(Component×Component)·f∈components(m) ↔ components(m)∧container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="container(Inst)⊆f">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="m=Inst">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c ↦ dest∈to_unfold_c_in"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="f∈components(m) ↔ components(m)">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m⦂Model·∃f⦂ℙ(Component×Component)·f∈components(m) ↔ components(m)∧container(m)⊆f∧f;f⊆f∧(id ⦂ ℙ(Component×Component))∩f=(∅ ⦂ ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="(id ⦂ ℙ(Component×Component))∩(((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f)=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="((ran(new_c) × {dest});f)∪(ran(new_c) × {dest})∪f">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prExpr>
<org.eventb.core.prExpr name="e1" org.eventb.core.expression="m">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prExpr>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.exF"/>
<org.eventb.core.prReas name="r11" org.eventb.core.prRID="org.eventb.smt.core.externalSMT"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.doCase"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allD"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.exI"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.mngHyp"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_node_c/new_c_container/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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="p8">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p6" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p7"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p8" 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="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Inst∈dom(container)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Inst∈dom(container)∧container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/to_unfold_c_in/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="Component,Model">
<org.eventb.core.lang name="L"/>
<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">
<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="REWRITE0" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p5"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="p2"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="Component"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×Component)"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Inst≠Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_clone_c∈components[{Inst}] ⇸ components[{Pat}]"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c∈dom(to_clone_c)∧to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬Inst=Mdl">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<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.autoRewritesL4:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/VAR" org.eventb.core.confidence="0" org.eventb.core.prFresh="sc,s,ae,f,i,c0,ae0" 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" org.eventb.core.prSets="Component,Model" org.eventb.core.psManual="true">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="rewrite ⊂ in goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p35" org.eventb.core.prHyps="p28" org.eventb.core.prInfHyps="p36"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p37" org.eventb.core.prHyps="p28" org.eventb.core.prInfHyps="p38"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p40">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p21" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p39"/>
<org.eventb.core.prRule name="r3" 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="p41"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p42"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p43"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p43" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p44"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees sc)" org.eventb.core.prGoal="p40" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p45">
<org.eventb.core.prIdent name="sc" org.eventb.core.type="ℙ(ℤ×Component)"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p45" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p51" org.eventb.core.prHyps="p46,p47,p48,p49,p50">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p51" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p52">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p3,p6,p7,p9,p10,p53,p11,p12,p13,p14,p15,p16,p17,p18,p20,p23,p24,p25,p26,p44,p28,p29,p30,p31,p32,p33,p39,p54"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∃ hyp (∃f·container⊆f∧f;f⊆f∧id∩f=∅)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p44" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p55,p56,p57">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prHypAction>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p55,p56,p57"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p52" org.eventb.core.prHyps="p1,p2,p3,p4,p48,p5,p6,p7,p9,p10,p11,p12,p57,p13,p55,p14,p15,p47,p16,p17,p56,p18,p19,p20,p23,p24,p49,p25,p26,p46,p50,p28,p29,p30,p31,p32,p33,p39">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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="p58">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees c0)" org.eventb.core.prGoal="p58" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p59">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p59" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p61" org.eventb.core.prHyps="p60">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p1,p3,p6,p7,p9,p10,p53,p11,p12,p13,p14,p15,p16,p17,p18,p20,p23,p24,p25,p26,p44,p28,p29,p30,p31,p32,p33,p39,p54"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∃ hyp (∃f·container⊆f∧f;f⊆f∧id∩f=∅)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p44" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p55,p56,p57">
<org.eventb.core.prIdent name="f" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prHypAction>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p55,p56,p57"/>
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="dc (c0=c)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p63">
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with c0=c" org.eventb.core.prGoal="p61" org.eventb.core.prHyps="p63">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p64">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="dc (new_c=∅)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p65">
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with new_c=∅" org.eventb.core.prHyps="p65">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p5" org.eventb.core.prInfHyps="p66"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p50" org.eventb.core.prInfHyps="p67"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p47" org.eventb.core.prInfHyps="p68"/>
<org.eventb.core.prHypAction name="FORWARD_INF3" org.eventb.core.prHyps="p54" org.eventb.core.prInfHyps="p69"/>
<org.eventb.core.prHypAction name="DESELECT4" org.eventb.core.prHyps="p47,p5,p50,p54"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p67" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p52"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p68" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p70"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p69" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p71"/>
<org.eventb.core.prRule name="r13" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="lae in new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="p65" org.eventb.core.prInfHyps="p66"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p5"/>
<org.eventb.core.prRule name="r13" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="lae in new_c∈1 ‥ c_multiplicity(c) ↣ Component ∖ ran(components)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="p65" org.eventb.core.prInfHyps="p66"/>
<org.eventb.core.prRule name="r14" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (c_multiplicity(c)=0)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p72">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p72" org.eventb.core.prHyps="p28,p31">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p73">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p73" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" 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.prAnte name="(" org.eventb.core.prGoal="p74" org.eventb.core.prHyps="p28,p31">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p50,p54,p47"/>
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with new_c=∅" org.eventb.core.prHyps="p65">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p50,p54,p47"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p69,p68,p67"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p67" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p52"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p68" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p70"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p69" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p71"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="veriT" org.eventb.core.prGoal="p74" org.eventb.core.prHyps="p66,p48,p19,p14">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="veriT"/>
</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.prHyps="p28,p74,p31">
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with c_multiplicity(c)=0" org.eventb.core.prGoal="p64" org.eventb.core.prHyps="p74">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p77">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p2" org.eventb.core.prInfHyps="p75"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p66" org.eventb.core.prInfHyps="p76"/>
<org.eventb.core.prHypAction name="DESELECT2" org.eventb.core.prHyps="p66,p2"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p77" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p78">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p75" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p65"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p76"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p27" org.eventb.core.prHyps="p28" org.eventb.core.prInfHyps="p79"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p22" org.eventb.core.prHyps="p28" org.eventb.core.prInfHyps="p80"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p79" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p81"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p80" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p82"/>
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with new_c=∅" org.eventb.core.prHyps="p65">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p83"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p81" org.eventb.core.prInfHyps="p84"/>
<org.eventb.core.prHypAction name="DESELECT2" org.eventb.core.prHyps="p81,p4"/>
<org.eventb.core.prRule name="r2" 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="HIDE0" org.eventb.core.prHyps="p83"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p84" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p85"/>
</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.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p74"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0"/>
</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="0"/>
</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.prHyps="p86">
<org.eventb.core.prRule name="r15" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp mp (inst c)" org.eventb.core.prHyps="p47">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p47"/>
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p87">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p47"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p47"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p87" org.eventb.core.prHyps="p1,p2,p3,p4,p48,p5,p6,p7,p9,p10,p11,p12,p57,p13,p55,p14,p15,p16,p47,p17,p56,p63,p18,p19,p20,p23,p24,p60,p49,p25,p26,p46,p50,p28,p29,p86,p30,p31,p32,p33,p39">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p88">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p47"/>
<org.eventb.core.prRule name="r16" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="rewrites converse in hyp ((to_clone_c∪(ran(new_c) × {c}))∼)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p88" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p89"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p89"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p89" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p90"/>
<org.eventb.core.prRule name="r17" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="relational image with ∪ left in hyp ((to_clone_c∼∪({c} × ran(new_c)))[{c}])" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p90" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p91"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p91"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p91" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p92"/>
<org.eventb.core.prRule name="r14" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (to_clone_c∼[{c}]∩ran(new_c)=∅)" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p93">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p47"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p93" org.eventb.core.prHyps="p1,p2,p3,p4,p48,p92,p5,p6,p7,p9,p10,p11,p12,p57,p13,p55,p14,p15,p16,p47,p17,p56,p63,p18,p19,p20,p23,p24,p60,p49,p25,p26,p46,p50,p28,p29,p86,p30,p31,p32,p33,p39">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p93">
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with to_clone_c∼[{c}]∩ran(new_c)=∅" org.eventb.core.prHyps="p93">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p92" org.eventb.core.prInfHyps="p94"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p92"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p94" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p95"/>
<org.eventb.core.prRule name="r14" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (card(ran(new_c))=c_multiplicity(c))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p96">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p96" org.eventb.core.prHyps="p28,p31">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p97">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p97" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4">
<org.eventb.core.prRule name="r18" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite of range of a function" org.eventb.core.prGoal="p4" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p72">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p72" org.eventb.core.prHyps="p28,p31">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p73">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p73" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" 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.prAnte name="(" org.eventb.core.prGoal="p98">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p98" org.eventb.core.prHyps="p1,p2,p3,p4,p48,p93,p5,p6,p7,p9,p10,p11,p12,p57,p13,p55,p14,p15,p16,p17,p56,p63,p18,p19,p20,p95,p23,p24,p60,p49,p25,p26,p46,p50,p28,p29,p86,p30,p31,p32,p33,p39">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p99">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p99" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e0"/>
</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="p2" org.eventb.core.prHyps="p28,p31,p4">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p5"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p1,p3,p48,p93,p4,p6,p7,p9,p10,p53,p11,p12,p57,p13,p55,p14,p15,p16,p17,p56,p63,p18,p19,p20,p95,p23,p24,p60,p100,p49,p25,p26,p50,p28,p29,p86,p30,p31,p32,p33,p39,p54"/>
<org.eventb.core.prRule name="r14" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (card(ran(new_c))=card(dom(new_c)))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p101">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p101" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p102">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p102" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p103">
<org.eventb.core.prRule name="r19" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p103" org.eventb.core.prHyps="p5">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p99">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p99" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" 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="0"/>
<org.eventb.core.prExprRef name=".subst" org.eventb.core.prRef="e1"/>
</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="p104" org.eventb.core.prHyps="p103,p4">
<org.eventb.core.prRule name="r20" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ae (1 ‥ c_multiplicity(c))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p72">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p72" org.eventb.core.prHyps="p28,p31">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p73">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p73" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" 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.prAnte name="(" org.eventb.core.prHyps="p28,p31,p105">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℙ(ℤ)"/>
<org.eventb.core.prRule name="r21" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he with ae=1 ‥ c_multiplicity(c)" org.eventb.core.prHyps="p105">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p5" org.eventb.core.prInfHyps="p106"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p5"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p105"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prRule name="r19" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p104" org.eventb.core.prHyps="p106">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p107">
<org.eventb.core.prRule name="r19" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in hyp (dom(new_c))" org.eventb.core.prHyps="p106">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p103" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p108"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p108"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p27" org.eventb.core.prHyps="p28" org.eventb.core.prInfHyps="p79"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p22" org.eventb.core.prHyps="p28" org.eventb.core.prInfHyps="p80"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p79" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p81"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p80" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p82"/>
</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="0"/>
<org.eventb.core.prExprRef name=".subst" org.eventb.core.prRef="e2"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1.0"/>
<org.eventb.core.prExprRef name=".subst" org.eventb.core.prRef="e2"/>
</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.prExprRef name=".expr" org.eventb.core.prRef="e1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p103,p104,p4">
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with card(ran(new_c))=card(dom(new_c))" org.eventb.core.prGoal="p2" org.eventb.core.prHyps="p104">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p109">
<org.eventb.core.prRule name="r19" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p109" org.eventb.core.prHyps="p5">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p110">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p14"/>
<org.eventb.core.prRule name="r22" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p110" org.eventb.core.prHyps="p1,p2,p3,p4,p48,p92,p93,p6,p5,p7,p9,p10,p11,p103,p12,p57,p13,p55,p14,p15,p16,p47,p17,p56,p63,p18,p104,p20,p19,p22,p95,p23,p24,p60,p49,p25,p26,p27,p46,p28,p50,p29,p86,p30,p31,p32,p33,p39">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0:30000"/>
</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="0.0"/>
<org.eventb.core.prExprRef name=".subst" org.eventb.core.prRef="e1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p104"/>
</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.prHyps="p2,p31,p4,p28">
<org.eventb.core.prRule name="r12" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with card(ran(new_c))=c_multiplicity(c)" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p95" org.eventb.core.prInfHyps="p111"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p95"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p27" org.eventb.core.prHyps="p28" org.eventb.core.prInfHyps="p79"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p22" org.eventb.core.prHyps="p28" org.eventb.core.prInfHyps="p80"/>
<org.eventb.core.prRule name="r2" 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="REWRITE0" org.eventb.core.prHidden="p79" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p81"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p80" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p82"/>
</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.prPredRef name=".pred" org.eventb.core.prRef="p2"/>
</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.prPredRef name=".pred" org.eventb.core.prRef="p93"/>
</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="0.0.1.0"/>
</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="0.0.1.0.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p65"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p112">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p61" org.eventb.core.prHyps="p1,p2,p3,p4,p48,p5,p6,p7,p9,p10,p11,p12,p57,p13,p55,p14,p15,p47,p16,p17,p56,p18,p19,p20,p23,p24,p60,p49,p112,p25,p26,p46,p50,p28,p29,p30,p31,p32,p33,p39">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p63"/>
</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.prAnte name=")" org.eventb.core.prGoal="p70">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees c0)" org.eventb.core.prGoal="p70" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p113">
<org.eventb.core.prIdent name="c0" org.eventb.core.type="Component"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p113" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p115" org.eventb.core.prHyps="p114">
<org.eventb.core.prRule name="r15" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp mp (inst c0)" org.eventb.core.prHyps="p47">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p47"/>
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p116">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p47"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p116" org.eventb.core.prHyps="p2,p46,p4,p48,p114,p5,p50,p19,p49">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p117">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p47"/>
<org.eventb.core.prRule name="r14" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (to_clone_c∼[{c0}]⊆(to_clone_c∪(ran(new_c) × {c}))∼[{c0}])" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p118">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p118" org.eventb.core.prHyps="p2,p46,p4,p48,p114,p5,p50,p19,p49,p117">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p118">
<org.eventb.core.prRule name="r14" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ah (card(to_clone_c∼[{c0}])≤card((to_clone_c∪(ran(new_c) × {c}))∼[{c0}]))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p119">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p119" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p120">
<org.eventb.core.prRule name="r23" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite set" org.eventb.core.prGoal="p120" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p121">
<org.eventb.core.prRule name="r24" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Inst)" org.eventb.core.prHyps="p9">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p121">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prRule name="r25" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p121" org.eventb.core.prHyps="p121"/>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e4"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p122">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p122" org.eventb.core.prHyps="p2,p46,p4,p48,p114,p5,p50,p19,p23,p49,p117,p118">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e5"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p123">
<org.eventb.core.prRule name="r16" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="rewrites converse relation in goal" org.eventb.core.prGoal="p123" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p124">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p124" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p125">
<org.eventb.core.prRule name="r17" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="relational image with ∪ left in goal" org.eventb.core.prGoal="p125" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p126">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p126" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p127">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p127" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p120">
<org.eventb.core.prRule name="r23" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite set" org.eventb.core.prGoal="p120" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p121">
<org.eventb.core.prRule name="r24" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp (inst Inst)" org.eventb.core.prHyps="p9">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p121">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prRule name="r25" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p121" org.eventb.core.prHyps="p121"/>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".exprs" org.eventb.core.prRef="e4"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p122">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p122" org.eventb.core.prHyps="p2,p46,p4,p48,p114,p5,p50,p19,p23,p49,p117,p118">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e5"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p128">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p5"/>
<org.eventb.core.prRule name="r23" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite set" org.eventb.core.prGoal="p128" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p4">
<org.eventb.core.prRule name="r18" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="finite of range of a function" org.eventb.core.prGoal="p4" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p72">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p72" org.eventb.core.prHyps="p28,p31">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p73">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p73" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" 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.prAnte name="(" org.eventb.core.prGoal="p129">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p129" org.eventb.core.prHyps="p2,p46,p4,p48,p114,p5,p50,p19,p49,p117,p118">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p99">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p99" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p62" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e6"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p130">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p130" org.eventb.core.prHyps="p2,p46,p4,p48,p114,p5,p50,p19,p49,p117,p118">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prExprRef name=".expr" org.eventb.core.prRef="e7"/>
</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="0"/>
</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="0.0"/>
</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="p131" org.eventb.core.prHyps="p123,p120">
<org.eventb.core.prRule name="r22" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p131" org.eventb.core.prHyps="p1,p2,p3,p4,p48,p6,p5,p7,p9,p10,p11,p12,p13,p14,p15,p16,p47,p17,p114,p18,p20,p19,p22,p23,p24,p49,p123,p25,p26,p27,p46,p44,p28,p50,p29,p30,p31,p32,p33,p39,p117,p118,p120">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1;2;3:30000"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prHyps="p123,p120,p131">
<org.eventb.core.prRule name="r20" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ae (card(to_clone_c∼[{c0}]))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p120">
<org.eventb.core.prRule name="r25" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p120" org.eventb.core.prHyps="p120"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p132,p120">
<org.eventb.core.prIdent name="ae" org.eventb.core.type="ℤ"/>
<org.eventb.core.prRule name="r21" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he with ae=card(to_clone_c∼[{c0}])" org.eventb.core.prGoal="p115" org.eventb.core.prHyps="p132">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p134">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p131" org.eventb.core.prInfHyps="p133"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p131"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p132"/>
<org.eventb.core.prRule name="r20" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ae (card((to_clone_c∪(ran(new_c) × {c}))∼[{c0}]))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p123">
<org.eventb.core.prRule name="r25" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p123" org.eventb.core.prHyps="p123"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prHyps="p135,p123">
<org.eventb.core.prIdent name="ae0" org.eventb.core.type="ℤ"/>
<org.eventb.core.prRule name="r21" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he with ae0=card((to_clone_c∪(ran(new_c) × {c}))∼[{c0}])" org.eventb.core.prHyps="p135">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p117" org.eventb.core.prInfHyps="p136"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p133" org.eventb.core.prInfHyps="p137"/>
<org.eventb.core.prHypAction name="DESELECT2" org.eventb.core.prHyps="p117,p133"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p135"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p48,p114,p5,p50,p19,p100,p49,p123,p118,p120"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="CVC3" org.eventb.core.prGoal="p134" org.eventb.core.prHyps="p137,p136">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R1000"/>
<org.eventb.core.prString name=".config_id" org.eventb.core.prSValue="CVC3"/>
</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.prExprRef name=".expr" org.eventb.core.prRef="e8"/>
</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.prExprRef name=".expr" org.eventb.core.prRef="e9"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p131"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p118"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>