<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<org.eventb.core.prFile version="1">
<org.eventb.core.prProof name="p_ctr/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p4"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p3,p4"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="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="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="p8"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m1,m2)" org.eventb.core.prGoal="p7" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p9">
<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="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p9" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="p10">
<org.eventb.core.prRule name="r5" 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="p12">
<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="p12" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p14">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p14" 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="p15">
<org.eventb.core.prRule name="r8" 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.prAnte name=")" org.eventb.core.prGoal="p16">
<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="p16" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p14">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p14" 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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<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="Component" org.eventb.core.type="ℙ(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="p14" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="¬m1=m2⇒m1∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧m2∈dom(ports)">
<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="p11" org.eventb.core.predicate="m1∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧m2∈dom(ports)">
<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="p17" 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="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="m1∈dom(ports)">
<org.eventb.core.prIdent name="m1" 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⇒m1∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧m2∈dom(ports)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p10" 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="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒m1∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧m2∈dom(ports)"/>
<org.eventb.core.prPred name="p13" 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="p3" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="m2∈dom(ports)">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<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="r8" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r6" 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="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<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="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="pc_ctr/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p7"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p6,p7"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p8">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p8" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p12"/>
<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="p14"/>
<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="p15">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<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="p16" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p18" 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="p19">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p19" org.eventb.core.prHyps="p2"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p20">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p21">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
<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="p21" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p18" 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="p22">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p22" org.eventb.core.prHyps="p4"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="+" org.eventb.core.prGoal="p23">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m)" org.eventb.core.prGoal="p23" 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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p18" 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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p14" 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="p24" 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="p17" 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="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m⦂Model·m∈dom(p_component)"/>
<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·m∈dom(p_component))∧p_component∈Model ⇸ ℙ(Port × Component)∧(∀m⦂Model·m∈dom(ports))∧ports∈Model ⇸ ℙ(Port)∧(∀m⦂Model·m∈dom(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="p18" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)∧m∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧m∈dom(components)∧components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m⦂Model·m∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)∧m∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧m∈dom(components)∧⊤"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="m∈dom(ports)">
<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="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="m∈dom(p_component)">
<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="∀m⦂Model·m∈dom(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="p20" org.eventb.core.predicate="∀m⦂Model·m∈dom(ports)"/>
<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.typeRewrites:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/p/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/p_ctr/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="Model,Port">
<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="ports'" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<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="p6" org.eventb.core.predicate="¬m1=m2⇒ports'(m1)∩ports'(m2)=(∅ ⦂ ℙ(Port))">
<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="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="p8" org.eventb.core.predicate="ports'(m1)∩ports'(m2)=(∅ ⦂ ℙ(Port))">
<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="p3" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports'(m1)∩ports'(m2)=(∅ ⦂ ℙ(Port))"/>
<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="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="p0" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports'(m1)∩ports'(m2)=(∅ ⦂ ℙ(Port))"/>
<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/pc_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/pc_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,Port">
<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="p_component'" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="ports'" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<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="p_component'(m)∈ports'(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·p_component'(m)∈ports'(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="to_unfold_p/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p4"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p3,p4"/>
<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="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="p9"/>
<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="p10">
<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="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="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="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.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="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<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="Component" org.eventb.core.type="ℙ(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="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="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(ports)∧ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<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="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="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<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.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/pmult/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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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="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="p7"/>
</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.prPred name="p4" 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="p7" 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="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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="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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/p_in_p_mult/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<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="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="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="∧ goal" org.eventb.core.prGoal="p0" 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="total function dom substitution in goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p1">
<org.eventb.core.prRule name="r5" 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.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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p12" 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.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="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<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="Component" org.eventb.core.type="ℙ(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.prPred name="p12" org.eventb.core.predicate="p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈dom(p_multiplicity)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Pattern"/>
<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="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="r5" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/new_p_ty/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p7"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p6,p7"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p8">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p8" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p12"/>
<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="p14"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional image goal for p_multiplicity(Pat)" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="p15">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional image goal for p_multiplicity(Pat)" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="p16">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="p15"/>
</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.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="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="p" org.eventb.core.type="Port"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="p_multiplicity(Pat)∈Port ⇸ ℕ1"/>
<org.eventb.core.prPred name="p10" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="p_multiplicity(Pat)∈Port ⇸ ℤ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="p_multiplicity(Pat)∈ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pat∈dom(p_multiplicity)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)∧p∈dom(p_multiplicity(Pat))∧p_multiplicity(Pat)∈Port ⇸ ℤ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="⊤∧⊤∧⊤∧p_multiplicity(Pat)∈Port ⇸ ℤ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="p∈dom(p_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p9" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funImgGoal"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/p/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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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="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="p7"/>
</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.prPred name="p4" 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="p7" 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="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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="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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/p_ctr/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m1,m2" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6" org.eventb.core.prSets="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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="p7,p8"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p7,p8"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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="p13"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m1,m2)" org.eventb.core.prGoal="p12" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p14">
<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="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p15">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p19">
<org.eventb.core.prRule name="r1" 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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p22">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m1=Pat" org.eventb.core.prHyps="p17">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prRule name="r8" 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="p23" org.eventb.core.prHyps="p19" org.eventb.core.prInfHyps="p24"/>
<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="p24" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p25"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p25"/>
</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="p26">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m1=Pat" org.eventb.core.prHyps="p17">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prRule name="r8" 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="p23" org.eventb.core.prHyps="p19" org.eventb.core.prInfHyps="p24"/>
<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="p24" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p25"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p25"/>
</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="p28" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p29">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m1=Pat" org.eventb.core.prHyps="p17">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prRule name="r8" 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="p23" org.eventb.core.prHyps="p27" org.eventb.core.prInfHyps="p30"/>
<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="HIDE0" org.eventb.core.prHyps="p30"/>
</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.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.prAnte name="(" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p31">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p19">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34"/>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r10" 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="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p37">
<org.eventb.core.prRule name="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p37" org.eventb.core.prHyps="p3,p6,p5,p7,p8,p11,p15,p31,p27">
<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.1"/>
</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.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="0.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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="new_p" org.eventb.core.type="ℙ(ℤ×Port)"/>
<org.eventb.core.prIdent name="p" org.eventb.core.type="Port"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prIdent name="to_unfold_p" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="((ports(Pat) ∖ {p})∪ran(new_p))∩((ports(Pat) ∖ {p})∪ran(new_p))=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p13" 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="p29" org.eventb.core.predicate="((ports(Pat) ∖ {p})∪ran(new_p))∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="¬m2=Pat">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="((ports(Pat) ∖ {p})∪ran(new_p))∩(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="¬m1=Pat">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="p∈to_unfold_p"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="¬m1=m2⇒(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m1)∩(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m2)=(∅ ⦂ ℙ(Port))">
<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="p28" org.eventb.core.predicate="((ports(Pat) ∖ {p})∪ran(new_p))∩({Pat} ⩤ ports)(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m1)∩(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="¬⊥"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="({Pat} ⩤ ports)(m1)∩({Pat} ⩤ ports)(m2)=(∅ ⦂ ℙ(Port))">
<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⇒(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m1)∩(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="new_p=(∅ ⦂ ℙ(ℤ×Port))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="¬Pat=m2">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="({Pat} ⩤ ports)(m1)∩((ports(Pat) ∖ {p})∪ran(new_p))=(∅ ⦂ ℙ(Port))">
<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,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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m1)∩(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m2)=(∅ ⦂ ℙ(Port))">
<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="p25" org.eventb.core.predicate="⊥"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="new_p∈1 ‥ p_multiplicity(Pat)(p) ↣ Port ∖ union(ran(ports))"/>
<org.eventb.core.prPred name="p15" 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="p19" org.eventb.core.predicate="m2=Pat">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="ports(Pat)⊆{p}"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<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="p21" org.eventb.core.predicate="ports(Pat)⊆{p}∧new_p=(∅ ⦂ ℙ(ℤ×Port))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="ports(m1)∩({Pat} ⩤ ports)(m2)=(∅ ⦂ ℙ(Port))">
<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="p34" org.eventb.core.predicate="ports(m1)∩((ports(Pat) ∖ {p})∪ran(new_p))=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="({Pat} ⩤ ports)(m1)∩(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m2)=(∅ ⦂ ℙ(Port))">
<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="p∈dom(p_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p9" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="m1=Pat">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="¬⊤"/>
<org.eventb.core.prReas name="r11" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.falseHyp"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<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.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/pc_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" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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="p8,p9"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p8,p9"/>
<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="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p12" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p13"/>
<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="p14"/>
<org.eventb.core.prRule name="r3" 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="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="ovr in 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="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p16">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Pat" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p16">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="p20">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p22">
<org.eventb.core.prRule name="r7" 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="p20" org.eventb.core.prHyps="p16" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p23" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p24"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p24"/>
</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.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="p25" org.eventb.core.prHyps="p20">
<org.eventb.core.prRule name="r4" 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="p26" org.eventb.core.prHyps="p16">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p27">
<org.eventb.core.prRule name="r7" 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="p16" org.eventb.core.prHyps="p20" org.eventb.core.prInfHyps="p24"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p24"/>
</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="p28" org.eventb.core.prHyps="p20">
<org.eventb.core.prRule name="r6" 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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p30">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p1,p5,p7,p6,p8,p9,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.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<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_p" org.eventb.core.type="ℙ(ℤ×Port)"/>
<org.eventb.core.prIdent name="p" org.eventb.core.type="Port"/>
<org.eventb.core.prIdent name="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prIdent name="to_unfold_p" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="(p_component{Pat ↦ ({p} ⩤ p_component(Pat))∪(ran(new_p) × (p_component(Pat))[{p}])})(m)∈(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m) → 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="p_component(m)∈(ports(Pat) ∖ {p})∪ran(new_p) → 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="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="∀m⦂Model·p_component(m)∈ports(m) → components(m)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="p_component(m)∈ports(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="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="p∈to_unfold_p"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·(p_component{Pat ↦ ({p} ⩤ p_component(Pat))∪(ran(new_p) × (p_component(Pat))[{p}])})(m)∈(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m) → components(m)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="p_component(m)∈({Pat} ⩤ ports)(m) → 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="({p} ⩤ p_component(Pat))∪(ran(new_p) × (p_component(Pat))[{p}])∈(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m) → 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="({Pat} ⩤ p_component)(m)∈(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m) → components(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="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="⊥"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="({Pat} ⩤ p_component)(m)∈({Pat} ⩤ ports)(m) → components(m)">
<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="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="({Pat} ⩤ p_component)(m)∈(ports(Pat) ∖ {p})∪ran(new_p) → 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="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="new_p∈1 ‥ p_multiplicity(Pat)(p) ↣ Port ∖ union(ran(ports))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="({p} ⩤ p_component(Pat))∪(ran(new_p) × (p_component(Pat))[{p}])∈ports(m) → components(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="({p} ⩤ p_component(Pat))∪(ran(new_p) × (p_component(Pat))[{p}])∈(ports(Pat) ∖ {p})∪ran(new_p) → components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="({p} ⩤ p_component(Pat))∪(ran(new_p) × (p_component(Pat))[{p}])∈(ports(Pat) ∖ {p})∪ran(new_p) → 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="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="({p} ⩤ p_component(Pat))∪(ran(new_p) × (p_component(Pat))[{p}])∈({Pat} ⩤ ports)(m) → components(m)">
<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="¬m=Pat">
<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="p∈dom(p_multiplicity(Pat))"/>
<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="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="¬⊤"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.falseHyp"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/to_unfold_p/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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="p6,p7"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p6,p7"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE1" 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="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p12" org.eventb.core.prHyps="p2,p3,p5,p4,p6,p7">
<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.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="new_p" org.eventb.core.type="ℙ(ℤ×Port)"/>
<org.eventb.core.prIdent name="p" org.eventb.core.type="Port"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prIdent name="to_unfold_p" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prPred name="p9" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" 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="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_unfold_p ∖ {p}⊆(ports(Pat) ∖ {p})∪ran(new_p)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="p∈to_unfold_p"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="new_p∈1 ‥ p_multiplicity(Pat)(p) ↣ Port ∖ union(ran(ports))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_p ∖ {p}⊆(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="to_unfold_p⊆ports(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="p∈dom(p_multiplicity(Pat))"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/sp/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<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="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.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="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p6" 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.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(ports)∧ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<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="Component" org.eventb.core.type="ℙ(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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/pc_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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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="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="p7"/>
</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.prPred name="p4" 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="p7" 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="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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="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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/new_p_component/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p4"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p3,p4"/>
<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="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="p9"/>
<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="p10">
<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="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="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="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.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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×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="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="p12" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈dom(p_component)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<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="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="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<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.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/p_multiplicity/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<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="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.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="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pat∈dom(p_multiplicity)"/>
<org.eventb.core.prPred name="p6" 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.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<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="Component" org.eventb.core.type="ℙ(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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/ip/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p6"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p5,p6"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p7">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p7" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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="p13"/>
<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="p12" org.eventb.core.prHyps="p1">
<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="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="r5" 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="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.prString name=".pos" org.eventb.core.prSValue=""/>
</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="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p9" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Mdl∈dom(ports)"/>
<org.eventb.core.prPred name="p13" 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="p15" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧Mdl∈dom(ports)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Mdl∈Model"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="⊤∧⊤∧Mdl∈dom(ports)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<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.typeRewrites:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/ipr/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p6"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p5,p6"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p7">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p7" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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.prString name=".pos" org.eventb.core.prSValue=""/>
</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="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Mdl∈dom(ports)"/>
<org.eventb.core.prPred name="p9" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Mdl∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</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.prIdent name="Component" org.eventb.core.type="ℙ(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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/to_unfold_p/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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="p9,p10"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p9,p10"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p12"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p13" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p14"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p15" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p16"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="p4">
<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="p19">
<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="p20"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p21"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p19" org.eventb.core.prHyps="p4,p7,p1,p5,p2,p6,p8,p9,p10">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<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="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="p_mult_others" org.eventb.core.type="ℙ(Port×ℤ)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prIdent name="to_unfold_p" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="inst_components∼∈components(Mdl) ⇸ components(Pat)"/>
<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="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="p16" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_p∪dom(inst_ports)⊆ports(Pat)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="¬Mdl=Pat"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c_mult_others∈components(Pat) ∖ dom(inst_components) → ℕ1"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="p_mult_others∈ports(Pat) ∖ dom(inst_ports) → ℕ1"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="Mdl∈Model"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="inst_ports∈ports(Pat) ↔ ports(Mdl)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="to_unfold_p⊆ports(Pat)∧dom(inst_ports)⊆ports(Pat)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_unfold_p⊆ports(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="inst_ports∼∈ports(Mdl) ⇸ ports(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="⊤∧dom(inst_ports)⊆ports(Pat)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Mdl≠Pat"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="dom(inst_ports)⊆ports(Pat)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="inst_components∈components(Pat) ↔ components(Mdl)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/ipr/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p6"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p5,p6"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p7">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p7" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p14">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p12" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p13"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p14" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Mdl∈dom(ports)"/>
<org.eventb.core.prPred name="p11" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="¬Mdl=Pat"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Mdl∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Mdl≠Pat"/>
<org.eventb.core.prPred name="p10" 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="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.genMPL3"/>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/np/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<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="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.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="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p6" 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.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(ports)∧ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<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="Component" org.eventb.core.type="ℙ(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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/p/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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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="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="p7"/>
</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.prPred name="p4" 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="p7" 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="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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="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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/p_ctr/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m1,m2" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p4"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p3,p4"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="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="∀ goal (frees m1,m2)" org.eventb.core.prGoal="p9" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<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="r4" 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="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p14">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in 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="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m1=Mdl" org.eventb.core.prHyps="p14">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p12" org.eventb.core.prInfHyps="p20"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prRule name="r8" 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="p20" org.eventb.core.prHyps="p16" org.eventb.core.prInfHyps="p21"/>
<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="p21" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p22"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p22"/>
</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="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m1=Mdl" org.eventb.core.prHyps="p14">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p12" org.eventb.core.prInfHyps="p20"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prRule name="r8" 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="p20" org.eventb.core.prHyps="p16" org.eventb.core.prInfHyps="p21"/>
<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="p21" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p22"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p22"/>
</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="p25" org.eventb.core.prHyps="p24">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p25" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m1=Mdl" org.eventb.core.prHyps="p14">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p12" org.eventb.core.prInfHyps="p20"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prRule name="r8" 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="p20" org.eventb.core.prHyps="p24" org.eventb.core.prInfHyps="p27"/>
<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="HIDE0" org.eventb.core.prHyps="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.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="0.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p28">
<org.eventb.core.prRule name="r5" 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="p16">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p31"/>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="0.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p24">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p33">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34"/>
<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="0.0"/>
</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="0.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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="new_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="¬m1=Mdl">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="ports(m1)∩(ports(Mdl)∪ran(new_ports))=(∅ ⦂ ℙ(Port))">
<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="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="∀m1⦂Model,m2⦂Model·m1≠m2⇒(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m1)∩(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="¬m2=Mdl">
<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⦂Model,m2⦂Model·¬m1=m2⇒(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m1)∩(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="(ports(Mdl)∪ran(new_ports))∩(ports(Mdl)∪ran(new_ports))=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="(ports(Mdl)∪ran(new_ports))∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="¬⊥"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="ports(m1)∩({Mdl} ⩤ ports)(m2)=(∅ ⦂ ℙ(Port))">
<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="p29" org.eventb.core.predicate="({Mdl} ⩤ ports)(m1)∩(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m2)=(∅ ⦂ ℙ(Port))">
<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="p15" org.eventb.core.predicate="(ports(Mdl)∪ran(new_ports))∩(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="(ports(Mdl)∪ran(new_ports))∩({Mdl} ⩤ ports)(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="({Mdl} ⩤ ports)(m1)∩({Mdl} ⩤ ports)(m2)=(∅ ⦂ ℙ(Port))">
<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⦂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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="⊥"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="m1=Mdl">
<org.eventb.core.prIdent name="m1" 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⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="new_ports=(∅ ⦂ ℙ(Port×Port))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p12" 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="p30" org.eventb.core.predicate="({Mdl} ⩤ ports)(m1)∩(ports(Mdl)∪ran(new_ports))=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m1)∩(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m2)=(∅ ⦂ ℙ(Port))">
<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="p11" org.eventb.core.predicate="¬m1=m2⇒(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m1)∩(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m2)=(∅ ⦂ ℙ(Port))">
<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="p19" org.eventb.core.predicate="ports(Mdl)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="m2=Mdl">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<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="p3" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="ports(Mdl)=(∅ ⦂ ℙ(Port))∧new_ports=(∅ ⦂ ℙ(Port×Port))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="¬Mdl=m2">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<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="Component" org.eventb.core.type="ℙ(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="¬⊤"/>
<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="r9" org.eventb.core.prRID="org.eventb.core.seqprover.falseHyp"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<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.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/pc_ctr/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p6"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p5,p6"/>
<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="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="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="p11"/>
<org.eventb.core.prRule name="r3" 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="r4" 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="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p13">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p1">
<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="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p17" org.eventb.core.prHyps="p13" org.eventb.core.prInfHyps="p20"/>
<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="p20" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p21"/>
</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.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="p22" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r4" 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="p23" org.eventb.core.prHyps="p13">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p23" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p24">
<org.eventb.core.prRule name="r6" 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="p17" org.eventb.core.prHyps="p13" org.eventb.core.prInfHyps="p20"/>
<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="p20" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p21"/>
</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.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p25" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p25" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p1">
<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="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p17" org.eventb.core.prHyps="p13" org.eventb.core.prInfHyps="p20"/>
<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="p20" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p21"/>
</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.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="p28" org.eventb.core.prHyps="p17">
<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="p13">
<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="p30" org.eventb.core.prHyps="p13">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p2">
<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="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p13" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" 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="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r5" 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="Functional image simplification in goal" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34">
<org.eventb.core.prRule name="r6" 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="p13" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" 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"/>
</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="p35" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r4" 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="p13">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p37">
<org.eventb.core.prRule name="r5" 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="r6" 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="p13" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" 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.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="p39" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r5" 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="r5" 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="Functional image simplification in goal" org.eventb.core.prGoal="p41" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p42"/>
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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.prIdent name="inst_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="inst_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="p_component(m)∈({Mdl} ⩤ ports)(m) → ({Mdl} ⩤ components)(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="Pattern⊆Model">
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))∈ports(m) → 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="p_component(m)∈ports(m) → 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="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))∈ports(m) → ({Mdl} ⩤ 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="p_component(m)∈ports(m) → ({Mdl} ⩤ 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="¬m=Mdl">
<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="({Mdl} ⩤ p_component)(m)∈ports(Mdl)∪ran(new_ports) → (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="p34" org.eventb.core.predicate="p_component(m)∈ports(Mdl)∪ran(new_ports) → 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="p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))∈ports(Mdl)∪ran(new_ports) → (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="p32" org.eventb.core.predicate="({Mdl} ⩤ p_component)(m)∈ports(Mdl)∪ran(new_ports) → ({Mdl} ⩤ components)(m)">
<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="p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))∈ports(Mdl)∪ran(new_ports) → ({Mdl} ⩤ components)(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="p_component(m)∈({Mdl} ⩤ ports)(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="p16" org.eventb.core.predicate="p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))∈ports(Mdl)∪ran(new_ports) → components(Mdl)∪ran(new_components)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="({Mdl} ⩤ p_component)(m)∈ports(Mdl)∪ran(new_ports) → 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="p24" org.eventb.core.predicate="p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))∈ports(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="p8" 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="⊥"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·(p_component{Mdl ↦ p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))})(m)∈(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m) → (components{Mdl ↦ components(Mdl)∪ran(new_components)})(m)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="(p_component{Mdl ↦ p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))})(m)∈(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(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="p4" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="p_component(m)∈ports(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="p19" org.eventb.core.predicate="p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))∈ports(Mdl)∪ran(new_ports) → 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="p_component(m)∈ports(Mdl)∪ran(new_ports) → ({Mdl} ⩤ 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=Mdl">
<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="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))∈({Mdl} ⩤ ports)(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="p3" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="({Mdl} ⩤ p_component)(m)∈({Mdl} ⩤ ports)(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="p39" org.eventb.core.predicate="({Mdl} ⩤ p_component)(m)∈({Mdl} ⩤ ports)(m) → ({Mdl} ⩤ components)(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="p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))∈({Mdl} ⩤ ports)(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="p25" org.eventb.core.predicate="p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))∈({Mdl} ⩤ ports)(m) → ({Mdl} ⩤ 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="p_component(m)∈ports(Mdl)∪ran(new_ports) → 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="p28" org.eventb.core.predicate="({Mdl} ⩤ p_component)(m)∈(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(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="p36" org.eventb.core.predicate="({Mdl} ⩤ p_component)(m)∈({Mdl} ⩤ ports)(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="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="p_component(Mdl)∪((inst_ports∪new_ports)∼;p_component(Pat);(inst_components∪new_components))∈(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(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="p20" org.eventb.core.predicate="¬⊤"/>
<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="r7" org.eventb.core.prRID="org.eventb.core.seqprover.falseHyp"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<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.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/to_unfold_p/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p55,p56"/>
<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="p31" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p57"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p45" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p58"/>
<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="p59"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p61" org.eventb.core.prHyps="p60">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with Pat=Mdl" org.eventb.core.prHyps="p60">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p49" org.eventb.core.prInfHyps="p62"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p14" org.eventb.core.prInfHyps="p63"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p10" org.eventb.core.prInfHyps="p64"/>
<org.eventb.core.prHypAction name="FORWARD_INF3" org.eventb.core.prHyps="p33" org.eventb.core.prInfHyps="p65"/>
<org.eventb.core.prHypAction name="FORWARD_INF4" org.eventb.core.prHyps="p16" org.eventb.core.prInfHyps="p66"/>
<org.eventb.core.prHypAction name="FORWARD_INF5" org.eventb.core.prHyps="p42" org.eventb.core.prInfHyps="p67"/>
<org.eventb.core.prHypAction name="FORWARD_INF6" org.eventb.core.prHyps="p5" org.eventb.core.prInfHyps="p68"/>
<org.eventb.core.prHypAction name="FORWARD_INF7" org.eventb.core.prHyps="p51" org.eventb.core.prInfHyps="p69"/>
<org.eventb.core.prHypAction name="FORWARD_INF8" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p70"/>
<org.eventb.core.prHypAction name="FORWARD_INF9" org.eventb.core.prHyps="p21" org.eventb.core.prInfHyps="p71"/>
<org.eventb.core.prHypAction name="FORWARD_INF10" org.eventb.core.prHyps="p41" org.eventb.core.prInfHyps="p72"/>
<org.eventb.core.prHypAction name="DESELECT11" org.eventb.core.prHyps="p49,p14,p10,p33,p16,p42,p5,p51,p17,p21,p41"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p61" org.eventb.core.prHyps="p28,p7,p36,p46,p8,p22,p9,p26,p52,p53,p39,p18,p29,p20,p23,p27,p2,p35,p43,p38,p49,p4,p19,p14,p48,p47,p10,p15,p33,p54,p30,p12,p16,p42,p5,p6,p1,p51,p34,p25,p50,p17,p13,p40,p21,p32,p41,p37,p11,p3,p24,p55,p56,p57,p58,p60,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72">
<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="p74" org.eventb.core.prHyps="p73">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p74" org.eventb.core.prHyps="p27">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p49">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="p49"/>
</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.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="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<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="inst_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<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.prIdent name="to_unfold_p" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prPred name="p59" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})"/>
<org.eventb.core.prPred name="p64" org.eventb.core.predicate="inst_components∈components(Mdl) ⤔ components(Mdl)"/>
<org.eventb.core.prPred name="p70" org.eventb.core.predicate="dom(inst_ports)⊆dom(p_component(Mdl) ▷ dom(inst_components))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="(p_multiplicity(Pat))[ports(Pat)]⊆{1}"/>
<org.eventb.core.prPred name="p74" org.eventb.core.predicate="to_unfold_p⊆({Mdl} ⩤ ports)(Pat)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Pat∈dom(p_multiplicity)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p65" org.eventb.core.predicate="inst_components∼;container(Mdl);inst_components⊆container(Mdl)"/>
<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 ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p62" org.eventb.core.predicate="to_unfold_p⊆ports(Mdl)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="inst_components∈components(Pat) ⤔ components(Mdl)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="new_ports[OPort]⊆OPort"/>
<org.eventb.core.prPred name="p60" org.eventb.core.predicate="Pat=Mdl"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Mdl∈dom(container)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Pat∈dom(p_component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="(c_multiplicity(Pat))[components(Pat)]⊆{1}"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p66" org.eventb.core.predicate="(container(Mdl))∼;inst_components∼;container(Mdl)⊆inst_components∼"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="(container(Mdl))∼;inst_components∼;container(Pat)⊆inst_components∼"/>
<org.eventb.core.prPred name="p58" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="dom(inst_ports)⊆dom(p_component(Pat) ▷ dom(inst_components))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<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.prPred name="p21" org.eventb.core.predicate="inst_ports∼;p_component(Pat);inst_components⊆p_component(Mdl)"/>
<org.eventb.core.prPred name="p22" 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="p23" org.eventb.core.predicate="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="ports{Mdl ↦ ports(Mdl)∪ran(new_ports)}∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p72" org.eventb.core.predicate="new_ports∈ports(Mdl) ∖ dom(inst_ports) ↣ Port ∖ union(ran(ports))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="inst_ports[IPort]⊆IPort"/>
<org.eventb.core.prPred name="p55" org.eventb.core.predicate="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p56" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ1"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="Mdl∈Model ∖ Pattern"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="c_index∈dom(to_clone_c) ⇸ ℕ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="container∈Model ⇸ ℙ(Component × Component)"/>
<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="Mdl∈dom(p_component)"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="inst_components∼;container(Pat);inst_components⊆container(Mdl)"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="Mdl∈dom(ports)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="∀m⦂Model·p_component(m)∈ports(m) → components(m)"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="new_ports[IPort]⊆IPort"/>
<org.eventb.core.prPred name="p67" org.eventb.core.predicate="new_components∈components(Mdl) ∖ dom(inst_components) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒p_multiplicity(m)∈ports(m) → ℕ1"/>
<org.eventb.core.prPred name="p61" org.eventb.core.predicate="to_unfold_p⊆ports(Mdl)∪ran(new_ports)"/>
<org.eventb.core.prPred name="p69" org.eventb.core.predicate="inst_ports∈ports(Mdl) ⤔ ports(Mdl)"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p68" org.eventb.core.predicate="(p_multiplicity(Mdl))[ports(Mdl)]⊆{1}"/>
<org.eventb.core.prPred name="p57" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="new_ports∈ports(Pat) ∖ dom(inst_ports) ↣ Port ∖ union(ran(ports))"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="new_components∈components(Pat) ∖ dom(inst_components) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p63" org.eventb.core.predicate="(c_multiplicity(Mdl))[components(Mdl)]⊆{1}"/>
<org.eventb.core.prPred name="p73" org.eventb.core.predicate="¬Pat=Mdl"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_p⊆(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(Pat)"/>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="to_unfold_p⊆ports(Pat)"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="inst_ports[OPort]⊆OPort"/>
<org.eventb.core.prPred name="p71" org.eventb.core.predicate="inst_ports∼;p_component(Mdl);inst_components⊆p_component(Mdl)"/>
<org.eventb.core.prPred name="p51" org.eventb.core.predicate="inst_ports∈ports(Pat) ⤔ ports(Mdl)"/>
<org.eventb.core.prPred name="p52" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p53" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p54" org.eventb.core.predicate="Pat∈dom(container)"/>
<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="r4" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r6" 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="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/sp/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<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="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Mdl∈dom(ports)"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Mdl∈dom(ports)∧ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<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="Component" org.eventb.core.type="ℙ(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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/new_c_ports_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" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p8"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p7,p8"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p5">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p9">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p9" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16">
<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="REWRITE1" org.eventb.core.prHidden="p12" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p13"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p14" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p15"/>
<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="p17"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p18"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19">
<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="p19" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p20">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type 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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p21" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1"/>
<org.eventb.core.prExprRef name=".subst" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p22">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p22" org.eventb.core.prHyps="p4"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prPred name="p13" 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="p17" 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="⊤"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="¬Mdl=Pat">
<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="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" 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="p20" org.eventb.core.predicate="Pat∈Model"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="⊤∧⊤∧⊤∧⊤∧Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Mdl≠Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" 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="p19" org.eventb.core.predicate="Pat∈dom(p_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 ⇸ ℤ∧Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × 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.trueGoal"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/pc_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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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.prHypAction name="REWRITE2" 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="p9"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p10"/>
</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.prPred name="p6" 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="p9" 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="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="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" 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="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" 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="p5" 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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/pc_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" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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="p6,p7"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p6,p7"/>
<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="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE1" 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="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="r3" 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="p13">
<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="ovr in goal" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p14">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Pat" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p14">
<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="PP" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p1,p2,p5,p6,p7,p14">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p3">
<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="PP" org.eventb.core.prGoal="p19" org.eventb.core.prHyps="p1,p2,p5,p6,p7,p17">
<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.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.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="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prIdent name="to_unfold_c" org.eventb.core.type="ℙ(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="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="p1" org.eventb.core.predicate="∀m⦂Model·p_component(m)∈ports(m) → components(m)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c∈to_unfold_c"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="p_component(m)∈ports(m) → 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="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·p_component(m)∈ports(m) → (components{Pat ↦ components(Pat)∪ran(new_c)})(m)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="p_component(m)∈ports(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="p5" org.eventb.core.predicate="new_c∈1 ‥ c_multiplicity(Pat)(c) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="p_component(Pat)∈ports(Pat) → components(Pat)∪ran(new_c)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="p_component(m)∈ports(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="p6" org.eventb.core.predicate="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="p_component(m)∈ports(m) → ({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="¬m=Pat">
<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="p14" 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="r6" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/to_unfold_p/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p4"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p3,p4"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<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.prHypAction name="REWRITE2" 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="generalized MP" 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="simplification rewrites" org.eventb.core.prGoal="p12" 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="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p14"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p15"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="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="new_c_ports" org.eventb.core.type="ℙ(ℤ×Port×Port)"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prIdent name="to_unfold_p" org.eventb.core.type="ℙ(Port)"/>
<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="p14" 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="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Mdl=Pat">
<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⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_p∪new_c_ports[1 ‥ c_multiplicity(Pat)(c) × dom(p_multiplicity(Pat))]⊆ports(Pat)"/>
<org.eventb.core.prPred name="p15" 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="p3" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="new_c_ports[1 ‥ c_multiplicity(Pat)(c) × dom(p_multiplicity(Pat))]⊆ports(Pat)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="to_unfold_p⊆ports(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="⊤∧new_c_ports[1 ‥ c_multiplicity(Pat)(c) × dom(p_multiplicity(Pat))]⊆ports(Pat)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Mdl≠Pat">
<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="to_unfold_p⊆ports(Pat)∧new_c_ports[1 ‥ c_multiplicity(Pat)(c) × dom(p_multiplicity(Pat))]⊆ports(Pat)"/>
<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="r3" 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="r2" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/new_p_component/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<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.prHypAction name="REWRITE2" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p12"/>
<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.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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prPred name="p6" 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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="¬Mdl=Pat">
<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="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Mdl≠Pat">
<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="Pat∈dom(p_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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/unfold_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" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p9"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p8,p9"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p3,p4,p6">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p10">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p12"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p13" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p14"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p15" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p16"/>
<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="p18"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p19"/>
<org.eventb.core.prRule name="r4" 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="p20">
<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="p20" org.eventb.core.prHyps="p5">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p1">
<org.eventb.core.prRule name="r6" 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.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="p21">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="p5"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="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="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prPred name="p14" 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="p18" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="¬Mdl=Pat">
<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="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="⊤∧⊤∧⊤∧⊤∧Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="Pat∈dom(p_multiplicity)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p19" 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="p2" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<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 ⇸ ℤ∧Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Mdl≠Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p13" 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.prExpr name="e0" org.eventb.core.expression="Pattern"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/card/WD" org.eventb.core.confidence="0" org.eventb.core.prFresh="pp" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p4"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p3,p4"/>
<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="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.prHypAction name="REWRITE2" 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="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="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees pp)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prIdent name="pp" org.eventb.core.type="Port"/>
<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="p15" org.eventb.core.prHyps="p14">
<org.eventb.core.prRule name="r5" 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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p18" 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="r8" 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.prAnte name=")" org.eventb.core.prGoal="p20"/>
<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="functional image goal for p_multiplicity(Pat)" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="p22">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="p22"/>
</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="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.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="inst_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="p_multiplicity(Pat)∈Port ⇸ ℕ1"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<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="p18" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="finite(inst_ports[{pp}])">
<org.eventb.core.prIdent name="pp" org.eventb.core.type="Port"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="p_multiplicity(Pat)∈Port ⇸ ℤ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Mdl=Pat">
<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⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="pp∈dom(p_multiplicity(Pat))">
<org.eventb.core.prIdent name="pp" org.eventb.core.type="Port"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="pp∈dom(inst_ports)⇒Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)∧pp∈dom(p_multiplicity(Pat))∧p_multiplicity(Pat)∈Port ⇸ ℤ∧finite(inst_ports[{pp}])">
<org.eventb.core.prIdent name="pp" org.eventb.core.type="Port"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="Pat∈dom(p_multiplicity)"/>
<org.eventb.core.prPred name="p12" 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="p17" org.eventb.core.predicate="Pat∈Model"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀pp⦂Port·pp∈dom(inst_ports)⇒Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)∧pp∈dom(p_multiplicity(Pat))∧p_multiplicity(Pat)∈Port ⇸ ℤ∧finite(inst_ports[{pp}])"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="pp∈dom(inst_ports)">
<org.eventb.core.prIdent name="pp" org.eventb.core.type="Port"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Mdl≠Pat">
<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="p_multiplicity∈Model → (Port ⇸ ℕ1)"/>
<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="Component" org.eventb.core.type="ℙ(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="Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)∧pp∈dom(p_multiplicity(Pat))∧p_multiplicity(Pat)∈Port ⇸ ℤ∧finite(inst_ports[{pp}])">
<org.eventb.core.prIdent name="pp" org.eventb.core.type="Port"/>
</org.eventb.core.prPred>
<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.allI"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.funImgGoal"/>
<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="r7" 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="r6" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/ip/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p6"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p5,p6"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p7">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p7" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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="p13"/>
<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="p12" org.eventb.core.prHyps="p1">
<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="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="r5" 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="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.prString name=".pos" org.eventb.core.prSValue=""/>
</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="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p9" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Mdl∈dom(ports)"/>
<org.eventb.core.prPred name="p13" 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="p15" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧Mdl∈dom(ports)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Mdl∈Model"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="⊤∧⊤∧Mdl∈dom(ports)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<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.typeRewrites:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/ports_inst_rel_comp_inst/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p4"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p3,p4"/>
<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="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="p9"/>
<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="p10">
<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="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="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="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.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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×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="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="p12" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈dom(p_component)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<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="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="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<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.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/ports_inst_rel_port_comp/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p6"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p5,p6"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p7">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p7" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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="p13"/>
<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="p12" org.eventb.core.prHyps="p2">
<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="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="r5" 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="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.prString name=".pos" org.eventb.core.prSValue=""/>
</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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" 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="p15" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)∧Mdl∈dom(p_component)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Mdl∈Model"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="⊤∧⊤∧Mdl∈dom(p_component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(p_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="p12" org.eventb.core.predicate="Mdl∈dom(p_component)"/>
<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.typeRewrites:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/pc_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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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="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="p7"/>
</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.prPred name="p4" 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="p7" 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="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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="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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p6"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p5,p6"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p7">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p7" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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.prString name=".pos" org.eventb.core.prSValue=""/>
</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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Mdl∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)∧Pat∈dom(p_component)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pat∈dom(p_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="p3" org.eventb.core.predicate="Mdl∈dom(p_component)"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/unfold_p_done/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p7"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p6,p7"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p3,p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p8">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p8" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p12"/>
<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="p14"/>
<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="p15">
<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="p15" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p1">
<org.eventb.core.prRule name="r6" 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.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="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.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="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p10" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)∧⊤∧⊤"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="Pat∈dom(p_multiplicity)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)∧Pat∈dom(ports)∧ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p9" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<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.typeRewrites:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<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.totalDom:2"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/pmult/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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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.prHypAction name="REWRITE2" 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="p9"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p10"/>
</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.prPred name="p6" 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="p9" 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="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="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" 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="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" 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="p5" 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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/new_p_mult/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<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="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.prHypAction name="REWRITE2" 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="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.prHypAction name="HIDE1" org.eventb.core.prHyps="p13"/>
<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="p14">
<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="p14" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p1">
<org.eventb.core.prRule name="r5" 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.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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p15" 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.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="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prPred name="p9" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="¬Mdl=Pat">
<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="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Pat∈dom(p_multiplicity)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p13" 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="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Mdl≠Pat">
<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="Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Pattern"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<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.conj:0"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<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.hyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/cloned_p_ty/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p6"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p5,p6"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p7">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p7" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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="p13"/>
<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 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="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="">
<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="⊤ goal" org.eventb.core.prGoal="p16" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1"/>
<org.eventb.core.prExprRef name=".subst" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p17">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p17" 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.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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×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="to_clone_c∈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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" 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="p16" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)∧c∈dom(to_clone_c)∧to_clone_c∈Component ⇸ Component"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)∧⊤∧⊤"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="Pat∈Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Pat∈dom(p_component)"/>
<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.typeRewrites:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<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.totalDom:2"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/p/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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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="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="p7"/>
</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.prPred name="p4" 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="p7" 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="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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="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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/p_ctr/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m1,m2" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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="p7,p8"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p7,p8"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p5" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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="p13"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m1,m2)" org.eventb.core.prGoal="p12" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p14">
<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="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p15">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p19">
<org.eventb.core.prRule name="r1" 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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p22">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m1=Pat" org.eventb.core.prHyps="p17">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prRule name="r8" 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="p23" org.eventb.core.prHyps="p19" org.eventb.core.prInfHyps="p24"/>
<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="p24" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p25"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p25"/>
</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="p26">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m1=Pat" org.eventb.core.prHyps="p17">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prRule name="r8" 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="p23" org.eventb.core.prHyps="p19" org.eventb.core.prInfHyps="p24"/>
<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="p24" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p25"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p25"/>
</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="p28" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p28" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p29">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m1=Pat" org.eventb.core.prHyps="p17">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prRule name="r8" 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="p23" org.eventb.core.prHyps="p27" org.eventb.core.prInfHyps="p30"/>
<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="HIDE0" org.eventb.core.prHyps="p30"/>
</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.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.prAnte name="(" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p31">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p19">
<org.eventb.core.prRule name="r10" 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.prString name=".pos" org.eventb.core.prSValue="0.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p27">
<org.eventb.core.prRule name="r10" 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="r10" 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="r11" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p37" org.eventb.core.prHyps="p2,p6,p1,p7,p8,p11,p15,p31,p27">
<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.1"/>
</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.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="0.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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<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="cloned_p" org.eventb.core.type="ℙ(Port×Port)"/>
<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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prPred name="p13" 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="p27" org.eventb.core.predicate="¬m2=Pat">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="ports(m1)∩(ports(Pat)∪ran(cloned_p))=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="¬m1=Pat">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="(ports(Pat)∪ran(cloned_p))∩(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m2)=(∅ ⦂ ℙ(Port))">
<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="cloned_c∈(container(Pat))∼[{to_clone_c(c)}] ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="(ports(Pat)∪ran(cloned_p))∩ports(m2)=(∅ ⦂ ℙ(Port))">
<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⇒(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m1)∩(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="¬m1=m2⇒(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m1)∩(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m2)=(∅ ⦂ ℙ(Port))">
<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="p30" org.eventb.core.predicate="¬⊥"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="({Pat} ⩤ ports)(m1)∩({Pat} ⩤ ports)(m2)=(∅ ⦂ ℙ(Port))">
<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="p26" org.eventb.core.predicate="cloned_p=(∅ ⦂ ℙ(Port×Port))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m1)∩(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="ports(Pat)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="ports(Pat)=(∅ ⦂ ℙ(Port))∧cloned_p=(∅ ⦂ ℙ(Port×Port))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="¬Pat=m2">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m1)∩(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m2)=(∅ ⦂ ℙ(Port))">
<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="p10" 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="⊥"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p15" 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="p19" org.eventb.core.predicate="m2=Pat">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="({Pat} ⩤ ports)(m1)∩(ports(Pat)∪ran(cloned_p))=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="cloned_p∈(p_component(Pat))∼[{to_clone_c(c)}] ↣ Port ∖ union(ran(ports))"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<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="p2" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="(ports(Pat)∪ran(cloned_p))∩(ports(Pat)∪ran(cloned_p))=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="(ports(Pat)∪ran(cloned_p))∩({Pat} ⩤ ports)(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="ports(m1)∩({Pat} ⩤ ports)(m2)=(∅ ⦂ ℙ(Port))">
<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⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="({Pat} ⩤ ports)(m1)∩(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m2)=(∅ ⦂ ℙ(Port))">
<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="p17" org.eventb.core.predicate="m1=Pat">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="¬⊤"/>
<org.eventb.core.prReas name="r11" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.falseHyp"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<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.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/pc_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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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="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="p7"/>
</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.prPred name="p4" 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="p7" 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="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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="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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/pc_ctr/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p6"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p5,p6"/>
<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="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="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="p11"/>
<org.eventb.core.prRule name="r3" 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="r4" 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="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p13">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p1">
<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="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p17" org.eventb.core.prHyps="p13" org.eventb.core.prInfHyps="p20"/>
<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="p20" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p21"/>
</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.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="p22" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r4" 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="p23" org.eventb.core.prHyps="p13">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p23" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p24">
<org.eventb.core.prRule name="r6" 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="p17" org.eventb.core.prHyps="p13" org.eventb.core.prInfHyps="p20"/>
<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="p20" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p21"/>
</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.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p25" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p25" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p1">
<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="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p17" org.eventb.core.prHyps="p13" org.eventb.core.prInfHyps="p20"/>
<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="p20" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p21"/>
</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.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="p28" org.eventb.core.prHyps="p17">
<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="p13">
<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="p30" org.eventb.core.prHyps="p13">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p2">
<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="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p13" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" 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="0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r5" 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="Functional image simplification in goal" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34">
<org.eventb.core.prRule name="r6" 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="p13" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" 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"/>
</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="p35" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r4" 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="p13">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p37">
<org.eventb.core.prRule name="r5" 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="r6" 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="p13" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" 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.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="p39" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r5" 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="r5" 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="Functional image simplification in goal" org.eventb.core.prGoal="p41" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p42"/>
<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.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="cloned_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="cloned_p" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
<org.eventb.core.prIdent name="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<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="p14" org.eventb.core.predicate="p_component(Pat)∪(ran(cloned_p) × {c})∈(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(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="({Pat} ⩤ p_component)(m)∈({Pat} ⩤ ports)(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="p_component(m)∈ports(m) → 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="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="({Pat} ⩤ p_component)(m)∈({Pat} ⩤ ports)(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="p31" org.eventb.core.predicate="p_component(m)∈ports(Pat)∪ran(cloned_p) → 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="p22" org.eventb.core.predicate="p_component(Pat)∪(ran(cloned_p) × {c})∈({Pat} ⩤ ports)(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="p25" org.eventb.core.predicate="p_component(Pat)∪(ran(cloned_p) × {c})∈({Pat} ⩤ ports)(m) → ({Pat} ⩤ 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="p_component(m)∈ports(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="p29" org.eventb.core.predicate="({Pat} ⩤ p_component)(m)∈ports(Pat)∪ran(cloned_p) → (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="p_component(m)∈({Pat} ⩤ ports)(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="p30" org.eventb.core.predicate="({Pat} ⩤ p_component)(m)∈ports(Pat)∪ran(cloned_p) → 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="p27" org.eventb.core.predicate="p_component(Pat)∪(ran(cloned_p) × {c})∈ports(m) → components(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="p_component(Pat)∪(ran(cloned_p) × {c})∈({Pat} ⩤ ports)(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="({Pat} ⩤ p_component)(m)∈(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(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="p_component(m)∈ports(Pat)∪ran(cloned_p) → ({Pat} ⩤ 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="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="⊥"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·(p_component{Pat ↦ p_component(Pat)∪(ran(cloned_p) × {c})})(m)∈(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m) → (components{Pat ↦ components(Pat)∪ran(cloned_c)})(m)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="p_component(Pat)∪(ran(cloned_p) × {c})∈ports(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="p40" org.eventb.core.predicate="p_component(m)∈({Pat} ⩤ ports)(m) → ({Pat} ⩤ components)(m)">
<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="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="p_component(Pat)∪(ran(cloned_p) × {c})∈ports(Pat)∪ran(cloned_p) → ({Pat} ⩤ 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="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="(p_component{Pat ↦ p_component(Pat)∪(ran(cloned_p) × {c})})(m)∈(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(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="p16" org.eventb.core.predicate="p_component(Pat)∪(ran(cloned_p) × {c})∈ports(Pat)∪ran(cloned_p) → components(Pat)∪ran(cloned_c)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="p_component(Pat)∪(ran(cloned_p) × {c})∈ports(Pat)∪ran(cloned_p) → (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="p26" org.eventb.core.predicate="p_component(Pat)∪(ran(cloned_p) × {c})∈ports(m) → ({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="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="p_component(Pat)∪(ran(cloned_p) × {c})∈ports(Pat)∪ran(cloned_p) → 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="ports∈Model → ℙ(Port)"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="({Pat} ⩤ p_component)(m)∈ports(Pat)∪ran(cloned_p) → ({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="({Pat} ⩤ p_component)(m)∈({Pat} ⩤ ports)(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="p34" org.eventb.core.predicate="p_component(m)∈ports(Pat)∪ran(cloned_p) → 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="p_component(m)∈ports(m) → ({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="¬m=Pat">
<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="p13" 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="¬⊤"/>
<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="r7" org.eventb.core.prRID="org.eventb.core.seqprover.falseHyp"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<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.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/pmult/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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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="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="p7"/>
</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.prPred name="p4" 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="p7" 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="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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="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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/to_unfold_p/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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="p6,p7"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p6,p7"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE1" 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="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p12" org.eventb.core.prHyps="p4,p2,p5,p1,p6,p7">
<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.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<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="cloned_p" org.eventb.core.type="ℙ(Port×Port)"/>
<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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prIdent name="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="to_unfold_p" org.eventb.core.type="ℙ(Port)"/>
<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="p13" 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="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p5" 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="cloned_p∈(p_component(Pat))∼[{to_clone_c(c)}] ↣ Port ∖ union(ran(ports))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c∈dom(to_clone_c)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="to_unfold_p⊆ports(Pat)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_p∪ran(cloned_p)⊆(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(Pat)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="to_unfold_p⊆ports(Pat)∪ran(cloned_p)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/cloned_p/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<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="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prPred name="p6" 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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pat∈dom(p_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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/source_p/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<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="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.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="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p6" 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.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(ports)∧ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<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="Component" org.eventb.core.type="ℙ(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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/p_mult/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<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="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="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="∧ goal" org.eventb.core.prGoal="p0" 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="total function dom substitution in goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p1">
<org.eventb.core.prRule name="r5" 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.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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p12" 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.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="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<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="Component" org.eventb.core.type="ℙ(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.prPred name="p12" org.eventb.core.predicate="p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈dom(p_multiplicity)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Pattern"/>
<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="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="r5" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/pc_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" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p8"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p7,p8"/>
<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="p9" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p10"/>
<org.eventb.core.prHypAction name="REWRITE1" 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="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prRule name="r3" 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="p14">
<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="ovr in goal" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p15">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="p15">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p15">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p1,p4,p7,p8,p15">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p19">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p21">
<org.eventb.core.prRule name="r7" 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="p19" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p22"/>
<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="p22" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p23"/>
</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.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="p24" org.eventb.core.prHyps="p19">
<org.eventb.core.prRule name="r4" 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="p25" org.eventb.core.prHyps="p15">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p25" org.eventb.core.prHyps="p5">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26">
<org.eventb.core.prRule name="r7" 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="p19" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p22"/>
<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="p22" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p23"/>
</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.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p27" org.eventb.core.prHyps="p19">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p27" org.eventb.core.prHyps="p5">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="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="p28" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p29">
<org.eventb.core.prRule name="r7" 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="p19" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p22"/>
<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="p22" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p23"/>
</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.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="p30" org.eventb.core.prHyps="p19">
<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="p15">
<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="p15">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p33">
<org.eventb.core.prRule name="r7" 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="p15" org.eventb.core.prHyps="p19" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p23"/>
</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="p34" org.eventb.core.prHyps="p19">
<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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p36">
<org.eventb.core.prRule name="r7" 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="p15" org.eventb.core.prHyps="p19" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p23"/>
</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="p37" org.eventb.core.prHyps="p19">
<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="p15">
<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="p5">
<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="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p15" org.eventb.core.prHyps="p19" org.eventb.core.prInfHyps="p23"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p23"/>
</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="p41" org.eventb.core.prHyps="p19">
<org.eventb.core.prRule name="r6" 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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p42" org.eventb.core.prHyps="p5">
<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="Functional image simplification in goal" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p44">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p44" org.eventb.core.prHyps="p1,p4,p7,p8,p19">
<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.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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<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="p0" org.eventb.core.predicate="∀m⦂Model·(p_component{Pat ↦ p_component(Pat) ⩥ {c}})(m)∈(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m) → (components{Pat ↦ components(Pat) ∖ {c}})(m)"/>
<org.eventb.core.prPred name="p13" 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="∀m⦂Model·p_component(m)∈ports(m) → components(m)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="p_component(m)∈ports(Pat) ∖ (p_component(Pat))∼[{c}] → ({Pat} ⩤ 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="p_component(Pat) ⩥ {c}∈ports(m) → ({Pat} ⩤ 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} ⩤ p_component)(m)∈({Pat} ⩤ ports)(m) → components(Pat) ∖ {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="({Pat} ⩤ p_component)(m)∈({Pat} ⩤ ports)(m) → ({Pat} ⩤ 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="p_component(m)∈ports(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="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="p_component(m)∈ports(Pat) ∖ (p_component(Pat))∼[{c}] → components(Pat) ∖ {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="p_component(Pat) ⩥ {c}∈ports(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} ⩤ p_component)(m)∈({Pat} ⩤ ports)(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="p21" org.eventb.core.predicate="p_component(Pat) ⩥ {c}∈ports(Pat) ∖ (p_component(Pat))∼[{c}] → 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="p_component(Pat) ⩥ {c}∈({Pat} ⩤ ports)(m) → ({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="p_component(Pat) ⩥ {c}∈(ports{Pat ↦ ports(Pat) ∖ (p_component(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="p32" org.eventb.core.predicate="({Pat} ⩤ p_component)(m)∈ports(Pat) ∖ (p_component(Pat))∼[{c}] → components(Pat) ∖ {c}">
<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="(p_component{Pat ↦ p_component(Pat) ⩥ {c}})(m)∈(ports{Pat ↦ ports(Pat) ∖ (p_component(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="p4" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="p_component(Pat) ⩥ {c}∈ports(Pat) ∖ (p_component(Pat))∼[{c}] → components(Pat) ∖ {c}"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="p_component(m)∈({Pat} ⩤ ports)(m) → components(Pat) ∖ {c}">
<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="({Pat} ⩤ p_component)(m)∈(ports{Pat ↦ ports(Pat) ∖ (p_component(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="p10" 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="⊥"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="p_component(m)∈({Pat} ⩤ ports)(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="p_component(m)∈ports(Pat) ∖ (p_component(Pat))∼[{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="p_component(m)∈ports(m) → components(Pat) ∖ {c}">
<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="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="p_component(Pat) ⩥ {c}∈({Pat} ⩤ ports)(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="p31" org.eventb.core.predicate="({Pat} ⩤ p_component)(m)∈ports(Pat) ∖ (p_component(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="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="p_component(Pat) ⩥ {c}∈ports(m) → 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="p_component(Pat) ⩥ {c}∈ports(Pat) ∖ (p_component(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="p34" org.eventb.core.predicate="({Pat} ⩤ p_component)(m)∈ports(Pat) ∖ (p_component(Pat))∼[{c}] → ({Pat} ⩤ components)(m)">
<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="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="p_component(Pat) ⩥ {c}∈ports(Pat) ∖ (p_component(Pat))∼[{c}] → ({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="p_component(m)∈ports(m) → ({Pat} ⩤ components)(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="¬m=Pat">
<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="p_component(Pat) ⩥ {c}∈({Pat} ⩤ ports)(m) → components(Pat) ∖ {c}">
<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="∀m1⦂Model,m2⦂Model·m1≠m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p15" 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="p22" org.eventb.core.predicate="¬⊤"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.falseHyp"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/p_ty/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p4"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p3,p4"/>
<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="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.prHypAction name="REWRITE2" 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="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="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="p13">
<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="p13" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p14">
<org.eventb.core.prRule name="r2" 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="r5" 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="e0"/>
</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="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.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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×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="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="p15" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Mdl=Pat">
<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⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" 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="p14" org.eventb.core.predicate="Pat∈Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Mdl≠Pat">
<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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="Pat∈dom(p_component)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<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="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="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<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.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="mult_cstr/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<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="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="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="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<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="⇒ 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="r5" 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="r6" 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="r7" 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="r8" 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.prAnte name=")" org.eventb.core.prGoal="p16">
<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="p16" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p17">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p18" 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="p19">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p19" 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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="m∈dom(p_multiplicity)">
<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.prIdent name="Component" org.eventb.core.type="ℙ(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.prPred name="p18" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="m∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)∧m∈dom(ports)∧ports∈Model ⇸ ℙ(Port)">
<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="m∈Model">
<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="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p12" 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="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="m∈Pattern⇒m∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)∧m∈dom(ports)∧ports∈Model ⇸ ℙ(Port)">
<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="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒m∈dom(p_multiplicity)∧p_multiplicity∈Model ⇸ ℙ(Port × ℤ)∧m∈dom(ports)∧ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="m∈dom(ports)">
<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="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<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="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="r8" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r6" 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="r7" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="apply_pattern/mult_cstr/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,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p42" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p53,p54"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p53,p54"/>
<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="p29" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p55"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p43" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p56"/>
<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="p57"/>
<org.eventb.core.prRule name="r3" 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="p58">
<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="⇒ goal" org.eventb.core.prGoal="p58" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p60" org.eventb.core.prHyps="p59">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p60" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p62" org.eventb.core.prHyps="p61">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Mdl" org.eventb.core.prGoal="p62" org.eventb.core.prHyps="p61">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p64">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p59" org.eventb.core.prInfHyps="p63"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p59"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p64" org.eventb.core.prHyps="p26,p6,p34,p44,p7,p21,p8,p24,p50,p51,p37,p17,p27,p19,p22,p25,p2,p33,p41,p36,p47,p3,p18,p13,p46,p45,p9,p14,p31,p52,p28,p11,p15,p40,p4,p5,p1,p49,p32,p23,p48,p16,p12,p38,p20,p30,p39,p35,p10,p53,p54,p55,p56,p59,p61,p63">
<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="p66" org.eventb.core.prHyps="p65">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p66" org.eventb.core.prHyps="p25">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p67"/>
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<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="inst_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="new_components" org.eventb.core.type="ℙ(Component×Component)"/>
<org.eventb.core.prIdent name="new_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<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.prIdent name="to_unfold_p" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prPred name="p57" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_multiplicity∈Model ⇸ ℙ(Port × ℤ)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="(p_multiplicity(Pat))[ports(Pat)]⊆{1}"/>
<org.eventb.core.prPred name="p67" org.eventb.core.predicate="p_multiplicity(m)∈ports(m) → ℕ1">
<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="Pat∈dom(p_multiplicity)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="Pat∈Pattern"/>
<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_multiplicity∈Pattern → (Component ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="inst_components∈components(Pat) ⤔ components(Mdl)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="new_ports[OPort]⊆OPort"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Mdl∈dom(container)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈dom(p_component)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="(c_multiplicity(Pat))[components(Pat)]⊆{1}"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Mdl∈dom(components)"/>
<org.eventb.core.prPred name="p60" org.eventb.core.predicate="p_multiplicity(m)∈(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m) → ℕ1">
<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="(container(Mdl))∼;inst_components∼;container(Pat)⊆inst_components∼"/>
<org.eventb.core.prPred name="p56" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="dom(inst_ports)⊆dom(p_component(Pat) ▷ dom(inst_components))"/>
<org.eventb.core.prPred name="p59" 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="p17" org.eventb.core.predicate="to_clone_c∈components(Pat) ⇸ components(Pat)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p19" 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="inst_ports∼;p_component(Pat);inst_components⊆p_component(Mdl)"/>
<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="to_free_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="inst_ports[IPort]⊆IPort"/>
<org.eventb.core.prPred name="p53" org.eventb.core.predicate="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p54" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ1"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<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="container∈Model ⇸ ℙ(Component × Component)"/>
<org.eventb.core.prPred name="p29" 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="Mdl∈dom(p_component)"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="inst_components∼;container(Pat);inst_components⊆container(Mdl)"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="Mdl∈dom(ports)"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="∀m⦂Model·p_component(m)∈ports(m) → components(m)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒p_multiplicity(m)∈(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m) → ℕ1"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="new_ports[IPort]⊆IPort"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒p_multiplicity(m)∈ports(m) → ℕ1"/>
<org.eventb.core.prPred name="p65" 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="p37" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p66" org.eventb.core.predicate="p_multiplicity(m)∈({Mdl} ⩤ ports)(m) → ℕ1">
<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="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="new_ports∈ports(Pat) ∖ dom(inst_ports) ↣ Port ∖ union(ran(ports))"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="new_components∈components(Pat) ∖ dom(inst_components) ↣ Component ∖ union(ran(components))"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="container∈Model → (Component ⇸ Component)"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p63" org.eventb.core.predicate="Mdl∈Pattern"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p61" 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="p64" org.eventb.core.predicate="p_multiplicity(Mdl)∈ports(Mdl)∪ran(new_ports) → ℕ1"/>
<org.eventb.core.prPred name="p62" org.eventb.core.predicate="p_multiplicity(m)∈ports(Mdl)∪ran(new_ports) → ℕ1">
<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="to_unfold_p⊆ports(Pat)"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="inst_ports[OPort]⊆OPort"/>
<org.eventb.core.prPred name="p58" org.eventb.core.predicate="m∈Pattern⇒p_multiplicity(m)∈(ports{Mdl ↦ ports(Mdl)∪ran(new_ports)})(m) → ℕ1">
<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="inst_ports∈ports(Pat) ⤔ ports(Mdl)"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="to_unfold_c⊆components(Pat)"/>
<org.eventb.core.prPred name="p51" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p52" org.eventb.core.predicate="Pat∈dom(container)"/>
<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="r6" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_c/mult_cstr/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p4"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p3,p4"/>
<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="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.prHypAction name="REWRITE2" 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="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="r3" 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="p13">
<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="⇒ goal" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p14">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in 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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Pat" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="p16">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p14"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p18"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="p20">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p22"/>
<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.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="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="new_c_ports" org.eventb.core.type="ℙ(ℤ×Port×Port)"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="p_multiplicity(Pat)∪(new_c_ports∼;(prj2 ⦂ ℙ(ℤ×Port×Port));p_multiplicity(Pat))∈ports(Pat) → ℕ1"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="m∈Pattern⇒(p_multiplicity{Pat ↦ p_multiplicity(Pat)∪(new_c_ports∼;(prj2 ⦂ ℙ(ℤ×Port×Port));p_multiplicity(Pat))})(m)∈ports(m) → ℕ1">
<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="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒(p_multiplicity{Pat ↦ p_multiplicity(Pat)∪(new_c_ports∼;(prj2 ⦂ ℙ(ℤ×Port×Port));p_multiplicity(Pat))})(m)∈ports(m) → ℕ1"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p14" 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="p2" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬Mdl=Pat">
<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⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="p_multiplicity(Pat)∪(new_c_ports∼;(prj2 ⦂ ℙ(ℤ×Port×Port));p_multiplicity(Pat))∈ports(m) → ℕ1">
<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="p_multiplicity(m)∈ports(m) → ℕ1">
<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="Mdl∈Model">
<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="(p_multiplicity{Pat ↦ p_multiplicity(Pat)∪(new_c_ports∼;(prj2 ⦂ ℙ(ℤ×Port×Port));p_multiplicity(Pat))})(m)∈ports(m) → ℕ1">
<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="Pat∈Pattern"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="({Pat} ⩤ p_multiplicity)(m)∈ports(m) → ℕ1">
<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="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Mdl≠Pat">
<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="¬m=Pat">
<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.prIdent name="Component" org.eventb.core.type="ℙ(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="m=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<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="r6" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/mult_cstr/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<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="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="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="∀ goal (frees m)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<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="⇒ 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="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p13" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p14">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p14">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Pat" org.eventb.core.prHyps="p14">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p17"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p19" org.eventb.core.prHyps="p18">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p19" org.eventb.core.prHyps="p2">
<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="generalized MP" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p18" org.eventb.core.prHyps="p14" org.eventb.core.prInfHyps="p21"/>
<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="p21" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p22"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p22"/>
</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.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="p23" org.eventb.core.prHyps="p18">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p23" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="p14">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p25">
<org.eventb.core.prRule name="r8" 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="p14" org.eventb.core.prHyps="p18" org.eventb.core.prInfHyps="p22"/>
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p22"/>
</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="p26" org.eventb.core.prHyps="p18">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="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="p27" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p28"/>
<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.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="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="cloned_p" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="p_multiplicity(Pat)∪(cloned_p∼;p_multiplicity(Pat))∈ports(Pat)∪ran(cloned_p) → ℕ1"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="p_multiplicity(m)∈({Pat} ⩤ ports)(m) → ℕ1">
<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·m∈Pattern⇒(p_multiplicity{Pat ↦ p_multiplicity(Pat)∪(cloned_p∼;p_multiplicity(Pat))})(m)∈(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m) → ℕ1"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="({Pat} ⩤ p_multiplicity)(m)∈({Pat} ⩤ ports)(m) → ℕ1">
<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="(p_multiplicity{Pat ↦ p_multiplicity(Pat)∪(cloned_p∼;p_multiplicity(Pat))})(m)∈(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m) → ℕ1">
<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="p_multiplicity(m)∈ports(m) → ℕ1">
<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="({Pat} ⩤ p_multiplicity)(m)∈(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m) → ℕ1">
<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∈Pattern⇒(p_multiplicity{Pat ↦ p_multiplicity(Pat)∪(cloned_p∼;p_multiplicity(Pat))})(m)∈(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m) → ℕ1">
<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="Pat∈Pattern"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="p_multiplicity(Pat)∪(cloned_p∼;p_multiplicity(Pat))∈ports(m) → ℕ1">
<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.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<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="⊥"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p12" 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="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="({Pat} ⩤ p_multiplicity)(m)∈ports(Pat)∪ran(cloned_p) → ℕ1">
<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⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="p_multiplicity(m)∈ports(Pat)∪ran(cloned_p) → ℕ1">
<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="p_multiplicity(Pat)∪(cloned_p∼;p_multiplicity(Pat))∈({Pat} ⩤ ports)(m) → ℕ1">
<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="p_multiplicity(Pat)∪(cloned_p∼;p_multiplicity(Pat))∈(ports{Pat ↦ ports(Pat)∪ran(cloned_p)})(m) → ℕ1">
<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="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<org.eventb.core.prPred name="p18" 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="p6" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" 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="¬⊤"/>
<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="r9" org.eventb.core.prRID="org.eventb.core.seqprover.falseHyp"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/mult_cstr/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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="p9,p10"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p9,p10"/>
<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="p11" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p12"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p13" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p14"/>
<org.eventb.core.prHypAction name="REWRITE2" org.eventb.core.prHidden="p15" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p16"/>
<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="p17"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p18"/>
<org.eventb.core.prRule name="r3" 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="p19">
<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="⇒ goal" org.eventb.core.prGoal="p19" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="p20">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p23" org.eventb.core.prHyps="p22">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p23" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="p22">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Pat" org.eventb.core.prHyps="p22">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p20"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1"/>
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="p6,p5,p8,p7,p9,p10,p22,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.prAnte name="(" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p25">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p27">
<org.eventb.core.prRule name="r9" 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="p25" org.eventb.core.prHyps="p22" org.eventb.core.prInfHyps="p28"/>
<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="p28" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p29"/>
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p29"/>
</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.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="p30" org.eventb.core.prHyps="p25">
<org.eventb.core.prRule name="r5" 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="p22">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p31" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p32">
<org.eventb.core.prRule name="r9" 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="p22" org.eventb.core.prHyps="p25" org.eventb.core.prInfHyps="p29"/>
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p29"/>
</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="p33" org.eventb.core.prHyps="p25">
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p2">
<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="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="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p6,p5,p8,p7,p9,p10,p20,p25">
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<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="new_p" org.eventb.core.type="ℙ(ℤ×Port)"/>
<org.eventb.core.prIdent name="p" org.eventb.core.type="Port"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prIdent name="to_unfold_p" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="p_multiplicity(m)∈({Pat} ⩤ ports)(m) → ℕ1">
<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="Pattern⊆Model"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="({Pat} ⩤ p_multiplicity)(m)∈({Pat} ⩤ ports)(m) → ℕ1">
<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="p∈to_unfold_p"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒p_multiplicity(m)∈ports(m) → ℕ1"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="p_multiplicity(m)∈ports(m) → ℕ1">
<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="Pat∈Pattern"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="({Pat} ⩤ p_multiplicity)(m)∈(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m) → ℕ1">
<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·m∈Pattern⇒(p_multiplicity{Pat ↦ ({p} ⩤ p_multiplicity(Pat))(ran(new_p) × {1})})(m)∈(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m) → ℕ1"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="({p} ⩤ p_multiplicity(Pat))(ran(new_p) × {1})∈(ports(Pat) ∖ {p})∪ran(new_p) → ℕ1"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="m∈Pattern⇒(p_multiplicity{Pat ↦ ({p} ⩤ p_multiplicity(Pat))(ran(new_p) × {1})})(m)∈(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m) → ℕ1">
<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="∀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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="⊥"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="({p} ⩤ p_multiplicity(Pat))(ran(new_p) × {1})∈ports(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="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p20" 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="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="¬Mdl=Pat">
<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="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="({p} ⩤ p_multiplicity(Pat))(ran(new_p) × {1})∈({Pat} ⩤ ports)(m) → ℕ1">
<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="new_p∈1 ‥ p_multiplicity(Pat)(p) ↣ Port ∖ union(ran(ports))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="(p_multiplicity{Pat ↦ ({p} ⩤ p_multiplicity(Pat))(ran(new_p) × {1})})(m)∈(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m) → ℕ1">
<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="({p} ⩤ p_multiplicity(Pat))(ran(new_p) × {1})∈(ports{Pat ↦ (ports(Pat) ∖ {p})∪ran(new_p)})(m) → ℕ1">
<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="({Pat} ⩤ p_multiplicity)(m)∈(ports(Pat) ∖ {p})∪ran(new_p) → ℕ1">
<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="Mdl∈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="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Mdl≠Pat">
<org.eventb.core.prIdent name="Mdl" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<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="p32" org.eventb.core.predicate="p_multiplicity(m)∈(ports(Pat) ∖ {p})∪ran(new_p) → ℕ1">
<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="p∈dom(p_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p13" 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="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" 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="p28" org.eventb.core.predicate="¬⊤"/>
<org.eventb.core.prReas name="r4" 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="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="org.eventb.core.seqprover.falseHyp"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/p/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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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="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="p7"/>
</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.prPred name="p4" 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="p7" 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="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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="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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/p_ctr/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="m1,m2" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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="p5,p6"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p5,p6"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p10">
<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="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p11"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees m1,m2)" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<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="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ 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="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p15">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p17">
<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="p19">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m1=Pat" org.eventb.core.prHyps="p15">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p13" org.eventb.core.prInfHyps="p20"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prRule name="r7" 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="p20" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p21"/>
<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="p21" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p22"/>
<org.eventb.core.prRule name="r8" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊥ hyp" org.eventb.core.prHyps="p22"/>
</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="p24" org.eventb.core.prHyps="p23">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p25">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p25" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m1=Pat" org.eventb.core.prHyps="p15">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p13" org.eventb.core.prInfHyps="p20"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prRule name="r7" 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="p20" org.eventb.core.prHyps="p23" org.eventb.core.prInfHyps="p27"/>
<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="HIDE0" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p1,p5,p6,p9,p15,p23">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.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="0.1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p28">
<org.eventb.core.prRule name="r5" 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="p17">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p31">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p31" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p32">
<org.eventb.core.prRule name="r10" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p1,p5,p6,p9,p13,p28,p17">
<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.prString name=".pos" org.eventb.core.prSValue="0.0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p23">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34">
<org.eventb.core.prRule name="r9" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="p2">
<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="PP" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p1,p5,p6,p9,p13,p28,p23">
<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.1"/>
</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.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="0.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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<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="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="p23" org.eventb.core.predicate="¬m2=Pat">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="¬m1=Pat">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="({Pat} ⩤ ports)(m1)∩(ports(Pat) ∖ (p_component(Pat))∼[{c}])=(∅ ⦂ ℙ(Port))">
<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,m2⦂Model·¬m1=m2⇒(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m1)∩(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="ports(Pat)⊆(p_component(Pat))∼[{c}]"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="¬m1=m2⇒(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m1)∩(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m2)=(∅ ⦂ ℙ(Port))">
<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="p27" org.eventb.core.predicate="¬⊥"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="ports(Pat)∩ports(m2)⊆(p_component(Pat))∼[{c}]">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="({Pat} ⩤ ports)(m1)∩({Pat} ⩤ ports)(m2)=(∅ ⦂ ℙ(Port))">
<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="p16" org.eventb.core.predicate="(ports(Pat) ∖ (p_component(Pat))∼[{c}])∩(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="({Pat} ⩤ ports)(m1)∩(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m2)=(∅ ⦂ ℙ(Port))">
<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="p31" org.eventb.core.predicate="ports(m1)∩(ports(Pat) ∖ (p_component(Pat))∼[{c}])=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="(ports(Pat) ∖ (p_component(Pat))∼[{c}])∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m1)∩(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="(ports(Pat) ∖ (p_component(Pat))∼[{c}])∩({Pat} ⩤ ports)(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="¬Pat=m2">
<org.eventb.core.prIdent name="m2" 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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="⊥"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m1)∩(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m2)=(∅ ⦂ ℙ(Port))">
<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⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p13" 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="p17" org.eventb.core.predicate="m2=Pat">
<org.eventb.core.prIdent name="m2" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="ports(m1)∩ports(Pat)⊆(p_component(Pat))∼[{c}]">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<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="p18" org.eventb.core.predicate="(ports(Pat) ∖ (p_component(Pat))∼[{c}])∩(ports(Pat) ∖ (p_component(Pat))∼[{c}])=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="ports(m1)∩({Pat} ⩤ ports)(m2)=(∅ ⦂ ℙ(Port))">
<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⦂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="p15" org.eventb.core.predicate="m1=Pat">
<org.eventb.core.prIdent name="m1" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="¬⊤"/>
<org.eventb.core.prReas name="r10" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r8" org.eventb.core.prRID="org.eventb.core.seqprover.falseHyp"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r9" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/mult_cstr/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4" org.eventb.core.prSets="Component,Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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="p5,p6"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p5,p6"/>
<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="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="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="p11"/>
<org.eventb.core.prRule name="r3" 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="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ 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="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ovr in goal" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p15">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Pat" org.eventb.core.prGoal="p16" org.eventb.core.prHyps="p15">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p17"/>
</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.prHyps="p19">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p2">
<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="PP" org.eventb.core.prGoal="p21" org.eventb.core.prHyps="p4,p1,p5,p6,p13,p19">
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<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="p20" org.eventb.core.predicate="p_multiplicity(m)∈({Pat} ⩤ ports)(m) → ℕ1">
<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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pattern⊆Model"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="p_multiplicity(m)∈(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m) → ℕ1">
<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="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p13" 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="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒p_multiplicity(m)∈ports(m) → ℕ1"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="p_multiplicity(Pat)∈ports(Pat) ∖ (p_component(Pat))∼[{c}] → ℕ1"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="p_multiplicity(m)∈ports(m) → ℕ1">
<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·m∈Pattern⇒p_multiplicity(m)∈(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m) → ℕ1"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="Pat∈Pattern"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Port=IPort∪OPort"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c∈to_free_c ∖ ran(to_clone_c)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="ports∈Model → ℙ(Port)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="m∈Pattern⇒p_multiplicity(m)∈(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(m) → ℕ1">
<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="p_multiplicity(m)∈ports(Pat) ∖ (p_component(Pat))∼[{c}] → ℕ1">
<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="¬m=Pat">
<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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" 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="r8" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<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.eq:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/to_unfold_p/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p3"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p2,p3"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="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="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.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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prIdent name="to_unfold_p" org.eventb.core.type="ℙ(Port)"/>
<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="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="p8" org.eventb.core.predicate="to_unfold_p⊆ports(Pat) ∖ (p_component(Pat))∼[{c}]"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="to_unfold_p⊆(ports{Pat ↦ ports(Pat) ∖ (p_component(Pat))∼[{c}]})(Pat)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<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="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.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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/prt/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p6"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p5,p6"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p7">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p7" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p12">
<org.eventb.core.prHypAction name="REWRITE0" org.eventb.core.prHidden="p8" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prHypAction name="REWRITE1" org.eventb.core.prHidden="p10" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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="p13"/>
<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 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="p15">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="">
<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="⊤ goal" org.eventb.core.prGoal="p16" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1"/>
<org.eventb.core.prExprRef name=".subst" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p17">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p17" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×Component))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p9" 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="p13" 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="p16" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="⊤∧⊤∧Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="Pat∈Model"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="Pat∈dom(p_component)"/>
<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.typeRewrites:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<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.totalDom:2"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/pc_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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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="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="p7"/>
</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.prPred name="p4" 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="p7" 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="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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="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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="free_c/pc/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,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p4"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p3,p4"/>
<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="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="p9"/>
<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="p10">
<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="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="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="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.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="p_component" org.eventb.core.type="ℙ(Model×ℙ(Port×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="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="p12" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(p_component)∧p_component∈Model ⇸ ℙ(Port × Component)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_component∈Model → (Port ⇸ Component)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="Pat∈Model"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</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.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="Pat∈dom(p_component)"/>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Model"/>
<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="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="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<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.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/pm/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="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<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="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.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="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p6" 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.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="Pat∈dom(ports)∧ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<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="Component" org.eventb.core.type="ℙ(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.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/pmult/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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="p3" org.eventb.core.prHyps="p5,p6" org.eventb.core.prInfHyps="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="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.prHypAction name="REWRITE2" org.eventb.core.prHidden="p4" org.eventb.core.prHyps="" org.eventb.core.prInfHyps="p11"/>
<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="p12"/>
</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.prPred name="p3" org.eventb.core.predicate="∀pp⦂Port·Pat∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧(pp∈ports(Pat)⇒finite(inst_ports[{pp}]))">
<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="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="inst_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀pp⦂Port·pp∈ports(Pat)⇒finite(inst_ports[{pp}])">
<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="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="inst_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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.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="p12" 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="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="Pat∈dom(ports)">
<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="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="∀pp⦂Port·⊤∧⊤∧(pp∈ports(Pat)⇒finite(inst_ports[{pp}]))">
<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="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="inst_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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.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="r3" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/mult_cstr/INV" org.eventb.core.confidence="0" org.eventb.core.prFresh="m" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p4"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p3,p4"/>
<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="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="p9"/>
<org.eventb.core.prRule name="r3" 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="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="p12" org.eventb.core.prHyps="p11">
<org.eventb.core.prRule name="r5" 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="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with m=Pat" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="p13">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p11"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p15"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p17">
<org.eventb.core.prRule name="r7" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Functional image simplification in goal" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19"/>
<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.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="Pattern" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="inst_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="p_mult_others" org.eventb.core.type="ℙ(Port×ℤ)"/>
<org.eventb.core.prIdent name="p_multiplicity" org.eventb.core.type="ℙ(Model×ℙ(Port×ℤ))"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<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="Component" org.eventb.core.type="ℙ(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="Pattern⊆Model"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="p_mult_others{pp⦂Port·pp∈ports(Pat) ∣ pp ↦ card(inst_ports[{pp}])}∈ports(m) → ℕ1">
<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="p_mult_others{pp⦂Port·pp∈ports(Pat) ∣ pp ↦ card(inst_ports[{pp}])}∈ports(Pat) → ℕ1"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="p_multiplicity∈Pattern → (Port ⇸ ℕ1)"/>
<org.eventb.core.prPred name="p11" 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="p2" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒(p_multiplicity{Pat ↦ p_mult_others{pp⦂Port·pp∈ports(Pat) ∣ pp ↦ card(inst_ports[{pp}])}})(m)∈ports(m) → ℕ1"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="p_multiplicity(m)∈ports(m) → ℕ1">
<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="Pat∈Pattern"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="({Pat} ⩤ p_multiplicity)(m)∈ports(m) → ℕ1">
<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="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="(p_multiplicity{Pat ↦ p_mult_others{pp⦂Port·pp∈ports(Pat) ∣ pp ↦ card(inst_ports[{pp}])}})(m)∈ports(m) → ℕ1">
<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∈Pattern⇒(p_multiplicity{Pat ↦ p_mult_others{pp⦂Port·pp∈ports(Pat) ∣ pp ↦ card(inst_ports[{pp}])}})(m)∈ports(m) → ℕ1">
<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="¬m=Pat">
<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.prIdent name="Component" org.eventb.core.type="ℙ(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=Pat">
<org.eventb.core.prIdent name="m" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<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="r6" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r7" org.eventb.core.prRID="org.eventb.core.seqprover.funImgSimplifies:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.funOvr:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="instanciate_pattern/p_mult/WD" org.eventb.core.confidence="0" org.eventb.core.prFresh="pp" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="Model,Port">
<org.eventb.core.lang name="L"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p5"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p4,p5"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p6">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p6" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<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="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="p12"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees pp)" org.eventb.core.prGoal="p11" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p13">
<org.eventb.core.prIdent name="pp" org.eventb.core.type="Port"/>
<org.eventb.core.prRule name="r5" 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="p15" org.eventb.core.prHyps="p14"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="Pat" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="inst_ports" org.eventb.core.type="ℙ(Port×Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀pp⦂Port·Pat∈dom(ports)∧ports∈Model ⇸ ℙ(Port)∧(pp∈ports(Pat)⇒finite(inst_ports[{pp}]))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀pp⦂Port·pp∈ports(Pat)⇒finite(inst_ports[{pp}])"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="pp∈ports(Pat)⇒finite(inst_ports[{pp}])">
<org.eventb.core.prIdent name="pp" org.eventb.core.type="Port"/>
</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.prIdent name="Component" org.eventb.core.type="ℙ(Component)"/>
<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="Pattern⊆Model">
<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="finite(inst_ports[{pp}])">
<org.eventb.core.prIdent name="pp" org.eventb.core.type="Port"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="ports∈Model ⇸ ℙ(Port)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="Pat∈dom(ports)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="pp∈ports(Pat)">
<org.eventb.core.prIdent name="pp" org.eventb.core.type="Port"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀pp⦂Port·⊤∧⊤∧(pp∈ports(Pat)⇒finite(inst_ports[{pp}]))"/>
<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="Component" org.eventb.core.type="ℙ(Component)"/>
<org.eventb.core.prIdent name="components" org.eventb.core.type="ℙ(Model×ℙ(Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL4:0"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL3"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.allI"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.impI"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="clone_c/to_unfold_c/SIM" 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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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.prHypAction name="REWRITE2" 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="p9"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p10"/>
</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.prPred name="p6" 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="p9" 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="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="p8" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" 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="p7" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" 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="p5" 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.autoRewritesL4:0"/>
<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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_p/p_in_p_mult/THM" 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="Partition rewrites in hyp (partition(Port,IPort,OPort))" 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,p2"/>
<org.eventb.core.prHypAction name="SELECT1" org.eventb.core.prHyps="p1,p2"/>
<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="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="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="p7"/>
</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.prPred name="p4" 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="p7" 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="p6" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·¬m1=m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="Port=IPort∪OPort">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="IPort∩OPort=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(Port,IPort,OPort)">
<org.eventb.core.prIdent name="IPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="OPort" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀m1⦂Model,m2⦂Model·m1≠m2⇒ports(m1)∩ports(m2)=(∅ ⦂ ℙ(Port))">
<org.eventb.core.prIdent name="Model" org.eventb.core.type="ℙ(Model)"/>
<org.eventb.core.prIdent name="Port" org.eventb.core.type="ℙ(Port)"/>
<org.eventb.core.prIdent name="ports" org.eventb.core.type="ℙ(Model×ℙ(Port))"/>
</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="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="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.partitionRewrites"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="unfold_root_c/prop/WD" 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,Property" 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="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.prHypAction name="HIDE1" 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="p0" 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="sl/ds" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="SELECT0" org.eventb.core.prHyps="p10,p1,p11,p12,p13,p14,p15,p16,p17,p18,p2,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p4,p6"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ hyp mp (inst Pat)" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p43">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p2"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p43" 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="p2"/>
<org.eventb.core.prRule name="r6" 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="p44">
<org.eventb.core.prHypAction name="DESELECT0" org.eventb.core.prHyps="p2"/>
</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="p45"/>
</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="properties" org.eventb.core.type="ℙ(Component×Property)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="to_unfold_c_in;inst2pat_c⊆container(Pat)">
<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="to_unfold_c_in" 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.prPred name="p35" 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="p12" org.eventb.core.predicate="components∈Model → ℙ(Component)"/>
<org.eventb.core.prPred name="p36" 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="p33" org.eventb.core.predicate="to_unfold_c∩dom(container(Pat))=(∅ ⦂ ℙ(Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(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="c∈dom(properties)"/>
<org.eventb.core.prPred name="p44" 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="p41" org.eventb.core.predicate="c∈dom(c_multiplicity(Pat))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="Inst∈dom(components)">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀m⦂Model·finite(components(m))"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="components∈Model ⇸ ℙ(Component)"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="Inst∈dom(container)">
<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>
<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="p19" org.eventb.core.predicate="to_unfold_c_in∈components(Pat) ↔ components(Inst)">
<org.eventb.core.prIdent name="Inst" 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="to_clone_c∈components(Inst) ⇸ components(Pat)">
<org.eventb.core.prIdent name="Inst" 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="p28" 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="p34" org.eventb.core.predicate="dom(to_unfold_c_in)⊆dom(container(Pat))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(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="∀m1⦂Model,m2⦂Model·¬m1=m2⇒components(m1)∩components(m2)=(∅ ⦂ ℙ(Component))"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c_multiplicity∈Pattern → (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="p37" org.eventb.core.predicate="inst2pat_c;container(Pat)=container(Inst);inst2pat_c">
<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.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="c_multiplicity(Pat)∈Component ⇸ ℤ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="∀m⦂Model·m∈Pattern⇒c_multiplicity(m)∈components(m) → ℕ"/>
<org.eventb.core.prPred name="p32" 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="p25" 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="to_clone_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="properties∈Component ⇸ Property"/>
<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="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="p8" org.eventb.core.predicate="properties∈Component ↔ Property"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="c_multiplicity∈Model ⇸ ℙ(Component × ℤ)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="inst2pat_c∈components(Inst) → components(Pat)">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
<org.eventb.core.prIdent name="inst2pat_c" org.eventb.core.type="ℙ(Component×Component)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="Pat∈dom(c_multiplicity)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c∈dom(properties)∧properties∈Component ⇸ Property"/>
<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="p17" org.eventb.core.predicate="∀m⦂Model·container(m)∩(id ⦂ ℙ(Component×Component))=(∅ ⦂ ℙ(Component×Component))">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<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="p11" org.eventb.core.predicate="Inst∈Model ∖ Pattern">
<org.eventb.core.prIdent name="Inst" org.eventb.core.type="Model"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p24" 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="p5" 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="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="p20" org.eventb.core.predicate="Pat∈dom(components)"/>
<org.eventb.core.prPred name="p26" 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="p30" org.eventb.core.predicate="Pat∈dom(container)">
<org.eventb.core.prIdent name="container" org.eventb.core.type="ℙ(Model×ℙ(Component×Component))"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="Pat"/>
<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="r6" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.allmpD:0"/>
<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.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="unfold_node_c/prop/WD" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="Component,Property">
<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.prHypAction name="HIDE1" 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.prAnte name="(" org.eventb.core.prGoal="p8"/>
</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="properties" org.eventb.core.type="ℙ(Component×Property)"/>
<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="p6" org.eventb.core.predicate="properties∈Component ↔ Property"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c∈dom(properties)∧properties∈Component ⇸ Property"/>
<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.prPred name="p7" org.eventb.core.predicate="c∈dom(properties)"/>
<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="p8" org.eventb.core.predicate="properties∈Component ⇸ Property"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<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.prFile>
