From d8d19306bcaf47b18f53a54aa0ed75aa733b3e00 Mon Sep 17 00:00:00 2001
From: Michael Leuschel <leuschel@uni-duesseldorf.de>
Date: Wed, 25 Nov 2020 15:34:04 +0100
Subject: [PATCH] =?UTF-8?q?add=20first=20version=20of=20Abrial=E2=80=99s?=
 =?UTF-8?q?=20bridge=20model?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Bridge/bridge_island_visualization.svg   | 50 +++++++++++++++++++++
 Bridge/m0_island_bridge_3cars_mch.eventb |  2 +
 Bridge/m1_bridge_mch.eventb              |  2 +
 Bridge/visb_m0.json                      | 55 ++++++++++++++++++++++++
 Bridge/visb_m1.json                      | 55 ++++++++++++++++++++++++
 5 files changed, 164 insertions(+)
 create mode 100644 Bridge/bridge_island_visualization.svg
 create mode 100644 Bridge/m0_island_bridge_3cars_mch.eventb
 create mode 100644 Bridge/m1_bridge_mch.eventb
 create mode 100644 Bridge/visb_m0.json
 create mode 100644 Bridge/visb_m1.json

diff --git a/Bridge/bridge_island_visualization.svg b/Bridge/bridge_island_visualization.svg
new file mode 100644
index 0000000..4147b84
--- /dev/null
+++ b/Bridge/bridge_island_visualization.svg
@@ -0,0 +1,50 @@
+<svg width="765.0000000000001" height="555" xmlns="http://www.w3.org/2000/svg" id="carsonbridge" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <metadata id="metadata3426">image/svg+xml</metadata>
+ <defs>
+  <linearGradient id="linearGradient5682">
+   <stop offset="0" id="stop5684" stop-color="#4887d0"/>
+   <stop offset="1" id="stop5686" stop-opacity="0" stop-color="#4887d0"/>
+  </linearGradient>
+  <linearGradient xlink:href="#linearGradient5682" id="linearGradient5688" x1="-0.00079" y1="0.5" x2="1.00079" y2="0.5"/>
+ </defs>
+ <g id="g3402">
+  <title>background</title>
+  <rect id="canvas_background" x="-1" y="-1" fill="none" width="767" height="557"/>
+ </g>
+ <g>
+  <title>Layer 3</title>
+  <rect id="rect3428" width="630.12891" height="590.09137" x="-3.69577" y="-15.67732" stroke-width="1px" stroke="#2397c0" fill-rule="evenodd" fill="url(#linearGradient5688)"/>
+ </g>
+ <g id="g3411">
+  <title>Layer 2</title>
+  <rect stroke-dasharray="2,2" fill="#fff" stroke="#000" stroke-width="1.5" x="311.5" y="202.5" width="279" height="68" id="bridge"/>
+  
+  <ellipse stroke="#000" fill="#e2ffc6" stroke-width="1.5" cx="682.50001" cy="274.00002" id="ML" rx="166.00001" ry="326.49999"/>
+  
+  <ellipse fill="#fffcd3" stroke-width="1.5" cx="183.5" cy="235.50001" id="IL" rx="164.00001" ry="146.00001" stroke="#000"/>
+  
+  <text xml:space="preserve" text-anchor="left" font-family="Helvetica, Arial, sans-serif" font-size="24" id="value_n" y="39.5" x="27" fill-opacity="null" stroke-opacity="null" stroke-dasharray="2,2" stroke-width="0" stroke="#000" fill="#000000">
+  <tspan id="nr_cars_on_island_and_bridge">%n</tspan></text>
+  
+  <text xml:space="preserve" text-anchor="left" font-family="Helvetica, Arial, sans-serif" font-size="24" id="value_b" y="237.5" x="40" fill-opacity="null" stroke-opacity="null" stroke-dasharray="2,2" stroke-width="0" stroke="#000" fill="#000000">
+  <tspan id="nr_cars_on_island">%b</tspan>
+  </text>
+  
+  <text xml:space="preserve" text-anchor="left" font-family="Helvetica, Arial, sans-serif" font-size="24" id="value_a" y="181.5" x="471" fill-opacity="null" stroke-opacity="null" stroke-dasharray="2,2" stroke-width="0" stroke="#000" fill="#000000"><tspan id="nr_cars_on_bridge_a">%a</tspan>
+  </text>
+  
+  <text xml:space="preserve" text-anchor="left" font-family="Helvetica, Arial, sans-serif" font-size="24" id="value_c" y="304.5" x="356" fill-opacity="null" stroke-opacity="null" stroke-dasharray="2,2" stroke-width="0" stroke="#000" fill="#000000"><tspan id="nr_cars_on_bridge_c">%c</tspan></text>
+  
+  <ellipse id="ml_tl" ry="14.5" rx="14.5" cy="139.5" cx="490" stroke-width="1.5" stroke="#000" fill="#fff"/>
+  
+  <ellipse id="il_tl" ry="14.5" rx="14.5" cy="329.5" cx="371" stroke-width="1.5" stroke="#000" fill="#fff"/>
+  
+  <rect id="il_in_sr" height="10" width="28.66667" y="210.66667" x="323.33333" stroke-opacity="null" stroke-width="0" stroke="#000" fill="#DDDDDD"/>
+  
+  <rect id="il_out_sr" height="10" width="28.66667" y="244" x="341.33333" stroke-opacity="null" stroke-width="0" stroke="#000" fill="#DDDDDD"/>
+  
+  <rect id="ml_in_sr" height="10" width="28.66667" y="244" x="511.66667" stroke-opacity="null" stroke-width="0" stroke="#000" fill="#DDDDDD"/>
+  
+  <rect id="ml_out_sr" height="10" width="28.66667" y="210.66667" x="497.00001" stroke-opacity="null" stroke-width="0" stroke="#000" fill="#dddddd"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/Bridge/m0_island_bridge_3cars_mch.eventb b/Bridge/m0_island_bridge_3cars_mch.eventb
new file mode 100644
index 0000000..91dc06f
--- /dev/null
+++ b/Bridge/m0_island_bridge_3cars_mch.eventb
@@ -0,0 +1,2 @@
+package(load_event_b_project([event_b_model(none,m0_island_bridge_3cars,[sees(none,[context0,context0_3cars]),refines(none,m0_island_bridge),variables(none,[identifier(none,n)]),invariant(none,[]),theorems(none,[]),events(none,[event(rodinpos(m0_island_bridge_3cars,'INITIALISATION',internal_sees2),'INITIALISATION',ordinary(none),['INITIALISATION'],[],[],[],[assign(rodinpos(m0_island_bridge_3cars,act1,internal_act1),[identifier(none,n)],[integer(none,0)])],[]),event(rodinpos(m0_island_bridge_3cars,'ML_out',internal_sees3),'ML_out',ordinary(none),['ML_out'],[],[less(rodinpos(m0_island_bridge_3cars,grd1,internal_grd1),identifier(none,n),identifier(none,d))],[],[assign(rodinpos(m0_island_bridge_3cars,act1,internal_act1),[identifier(none,n)],[add(none,identifier(none,n),integer(none,1))])],[]),event(rodinpos(m0_island_bridge_3cars,'ML_in',internal_sees4),'ML_in',ordinary(none),['ML_in'],[],[greater(rodinpos(m0_island_bridge_3cars,grd1,internal_grd1),identifier(none,n),integer(none,0))],[],[assign(rodinpos(m0_island_bridge_3cars,act1,internal_act1),[identifier(none,n)],[minus(none,identifier(none,n),integer(none,1))])],[])])]),event_b_model(none,m0_island_bridge,[sees(none,[context0]),variables(none,[identifier(none,n)]),invariant(none,[member(rodinpos(m0_island_bridge,inv1,internal_inv1I),identifier(none,n),natural_set(none)),less_equal(rodinpos(m0_island_bridge,inv2,internal_inv3I),identifier(none,n),identifier(none,d)),disjunct(rodinpos(m0_island_bridge,'DLF','_MLohYJHeEeWRGJ9JkSwucQ'),less(none,identifier(none,n),identifier(none,d)),greater(none,identifier(none,n),integer(none,0)))]),theorems(none,[]),events(none,[event(rodinpos(m0_island_bridge,'INITIALISATION',internal_evt1),'INITIALISATION',ordinary(none),[],[],[],[],[assign(rodinpos(m0_island_bridge,act1,internal_act1),[identifier(none,n)],[integer(none,0)])],[]),event(rodinpos(m0_island_bridge,'ML_out',internal_evt2),'ML_out',ordinary(none),[],[],[less(rodinpos(m0_island_bridge,grd1,internal_grd1),identifier(none,n),identifier(none,d))],[],[assign(rodinpos(m0_island_bridge,act1,internal_act1),[identifier(none,n)],[add(none,identifier(none,n),integer(none,1))])],[]),event(rodinpos(m0_island_bridge,'ML_in',internal_evt3),'ML_in',ordinary(none),[],[],[greater(rodinpos(m0_island_bridge,grd1,internal_grd1),identifier(none,n),integer(none,0))],[],[assign(rodinpos(m0_island_bridge,act1,internal_act1),[identifier(none,n)],[minus(none,identifier(none,n),integer(none,1))])],[])])])],[event_b_context(none,context0,[extends(none,[]),constants(none,[identifier(none,d),identifier(none,green),identifier(none,red)]),abstract_constants(none,[]),axioms(none,[member(rodinpos(context0,axm1,internal_axm1A),identifier(none,d),natural_set(none)),equal(rodinpos(context0,axm2,internal_axm2A),identifier(none,'LIGHT'),set_extension(none,[identifier(none,green),identifier(none,red)])),not_equal(rodinpos(context0,axm3,internal_axm3A),identifier(none,green),identifier(none,red))]),theorems(none,[]),sets(none,[deferred_set(none,'LIGHT')])]),event_b_context(none,context0_3cars,[extends(none,[context0]),constants(none,[]),abstract_constants(none,[]),axioms(none,[equal(rodinpos(context0_3cars,probn,'_5zHScLLNEeW75IcRipcYDg'),identifier(none,d),integer(none,3))]),theorems(none,[]),sets(none,[])])],[exporter_version(3),po(m0_island_bridge,'Invariant  establishment',[event('INITIALISATION'),invariant(inv1)],true),po(m0_island_bridge,'Invariant  establishment',[event('INITIALISATION'),invariant(inv2)],true),po(m0_island_bridge,'Invariant  establishment',[event('INITIALISATION'),invariant('DLF')],false),po(m0_island_bridge,'Invariant  preservation',[event('ML_out'),invariant(inv1)],true),po(m0_island_bridge,'Invariant  preservation',[event('ML_out'),invariant(inv2)],true),po(m0_island_bridge,'Invariant  preservation',[event('ML_out'),invariant('DLF')],true),po(m0_island_bridge,'Invariant  preservation',[event('ML_in'),invariant(inv1)],true),po(m0_island_bridge,'Invariant  preservation',[event('ML_in'),invariant(inv2)],true),po(m0_island_bridge,'Invariant  preservation',[event('ML_in'),invariant('DLF')],true)],_Error)).
+
diff --git a/Bridge/m1_bridge_mch.eventb b/Bridge/m1_bridge_mch.eventb
new file mode 100644
index 0000000..2f7f7b9
--- /dev/null
+++ b/Bridge/m1_bridge_mch.eventb
@@ -0,0 +1,2 @@
+package(load_event_b_project([event_b_model(none,m1_bridge,[sees(none,[context0]),refines(none,m0_island_bridge),variables(none,[identifier(none,a),identifier(none,b),identifier(none,c)]),invariant(none,[member(rodinpos(m1_bridge,inv1,internal_inv1I),identifier(none,a),natural_set(none)),member(rodinpos(m1_bridge,inv2,internal_inv2I),identifier(none,b),natural_set(none)),member(rodinpos(m1_bridge,inv3,internal_inv3I),identifier(none,c),natural_set(none)),equal(rodinpos(m1_bridge,inv4,internal_inv4I),add(none,identifier(none,a),add(none,identifier(none,b),identifier(none,c))),identifier(none,n)),disjunct(rodinpos(m1_bridge,inv5,internal_inv5I),equal(none,identifier(none,a),integer(none,0)),equal(none,identifier(none,c),integer(none,0)))]),theorems(none,[]),variant(none,add(none,multiplication(none,integer(none,2),identifier(none,a)),identifier(none,b))),events(none,[event(rodinpos(m1_bridge,'INITIALISATION',internal_evt1),'INITIALISATION',ordinary(none),['INITIALISATION'],[],[],[],[assign(rodinpos(m1_bridge,act1,internal_act1),[identifier(none,a),identifier(none,b),identifier(none,c)],[integer(none,0),integer(none,0),integer(none,0)])],[]),event(rodinpos(m1_bridge,'ML_out',internal_evt2),'ML_out',ordinary(none),['ML_out'],[],[less(rodinpos(m1_bridge,grd1,internal_grd1),add(none,identifier(none,a),add(none,identifier(none,b),identifier(none,c))),identifier(none,d)),equal(rodinpos(m1_bridge,grd2,internal_grd2),identifier(none,c),integer(none,0))],[],[assign(rodinpos(m1_bridge,act1,internal_act1),[identifier(none,a)],[add(none,identifier(none,a),integer(none,1))])],[]),event(rodinpos(m1_bridge,'ML_in',internal_evt3),'ML_in',ordinary(none),['ML_in'],[],[greater(rodinpos(m1_bridge,grd1,internal_grd1),identifier(none,c),integer(none,0))],[],[assign(rodinpos(m1_bridge,act1,internal_act1),[identifier(none,c)],[minus(none,identifier(none,c),integer(none,1))])],[]),event(rodinpos(m1_bridge,'IL_in',internal_evt4),'IL_in',convergent(none),[],[],[greater(rodinpos(m1_bridge,grd1,internal_grd1),identifier(none,a),integer(none,0))],[],[assign(rodinpos(m1_bridge,act1,internal_act1),[identifier(none,a)],[minus(none,identifier(none,a),integer(none,1))]),assign(rodinpos(m1_bridge,act2,'_QsLTsFBaEeOH8cnegPmrEg'),[identifier(none,b)],[add(none,identifier(none,b),integer(none,1))])],[]),event(rodinpos(m1_bridge,'IL_out',internal_evt5),'IL_out',convergent(none),[],[],[greater(rodinpos(m1_bridge,grd1,internal_grd1),identifier(none,b),integer(none,0)),equal(rodinpos(m1_bridge,grd2,internal_grd2),identifier(none,a),integer(none,0))],[],[assign(rodinpos(m1_bridge,act1,internal_act1),[identifier(none,b)],[minus(none,identifier(none,b),integer(none,1))]),assign(rodinpos(m1_bridge,act2,internal_act3),[identifier(none,c)],[add(none,identifier(none,c),integer(none,1))])],[])])]),event_b_model(none,m0_island_bridge,[sees(none,[context0]),variables(none,[identifier(none,n)]),invariant(none,[member(rodinpos(m0_island_bridge,inv1,internal_inv1I),identifier(none,n),natural_set(none)),less_equal(rodinpos(m0_island_bridge,inv2,internal_inv3I),identifier(none,n),identifier(none,d))]),theorems(none,[]),events(none,[event(rodinpos(m0_island_bridge,'INITIALISATION',internal_evt1),'INITIALISATION',ordinary(none),[],[],[],[],[assign(rodinpos(m0_island_bridge,act1,internal_act1),[identifier(none,n)],[integer(none,0)])],[]),event(rodinpos(m0_island_bridge,'ML_out',internal_evt2),'ML_out',ordinary(none),[],[],[less(rodinpos(m0_island_bridge,grd1,internal_grd1),identifier(none,n),identifier(none,d))],[],[assign(rodinpos(m0_island_bridge,act1,internal_act1),[identifier(none,n)],[add(none,identifier(none,n),integer(none,1))])],[]),event(rodinpos(m0_island_bridge,'ML_in',internal_evt3),'ML_in',ordinary(none),[],[],[greater(rodinpos(m0_island_bridge,grd1,internal_grd1),identifier(none,n),integer(none,0))],[],[assign(rodinpos(m0_island_bridge,act1,internal_act1),[identifier(none,n)],[minus(none,identifier(none,n),integer(none,1))])],[])])])],[event_b_context(none,context0,[extends(none,[]),constants(none,[identifier(none,d),identifier(none,green),identifier(none,red)]),abstract_constants(none,[]),axioms(none,[conjunct(rodinpos(context0,axm1,internal_axm1A),member(none,identifier(none,d),natural1_set(none)),equal(none,identifier(none,d),integer(none,3))),equal(rodinpos(context0,axm2,internal_axm2A),identifier(none,'LIGHT'),set_extension(none,[identifier(none,green),identifier(none,red)])),not_equal(rodinpos(context0,axm3,internal_axm3A),identifier(none,green),identifier(none,red))]),theorems(none,[]),sets(none,[deferred_set(none,'LIGHT')])])],[exporter_version(3),po(m1_bridge,'Invariant  establishment',[event('INITIALISATION'),event('INITIALISATION'),invariant(inv1)],true),po(m1_bridge,'Invariant  establishment',[event('INITIALISATION'),event('INITIALISATION'),invariant(inv2)],true),po(m1_bridge,'Invariant  establishment',[event('INITIALISATION'),event('INITIALISATION'),invariant(inv3)],true),po(m1_bridge,'Invariant  establishment',[event('INITIALISATION'),event('INITIALISATION'),invariant(inv4)],true),po(m1_bridge,'Invariant  establishment',[event('INITIALISATION'),event('INITIALISATION'),invariant(inv5)],true),po(m1_bridge,'Invariant  preservation',[event('ML_out'),event('ML_out'),invariant(inv1)],true),po(m1_bridge,'Invariant  preservation',[event('ML_out'),event('ML_out'),invariant(inv4)],true),po(m1_bridge,'Invariant  preservation',[event('ML_out'),event('ML_out'),invariant(inv5)],true),po(m1_bridge,'Guard strengthening (split)',[event('ML_out'),guard(grd1),event('ML_out'),event('ML_out')],true),po(m1_bridge,'Invariant  preservation',[event('ML_in'),event('ML_in'),invariant(inv3)],true),po(m1_bridge,'Invariant  preservation',[event('ML_in'),event('ML_in'),invariant(inv4)],true),po(m1_bridge,'Invariant  preservation',[event('ML_in'),event('ML_in'),invariant(inv5)],true),po(m1_bridge,'Guard strengthening (split)',[event('ML_in'),guard(grd1),event('ML_in'),event('ML_in')],true),po(m1_bridge,'Invariant  preservation',[event('IL_in'),invariant(inv1)],true),po(m1_bridge,'Invariant  preservation',[event('IL_in'),invariant(inv2)],true),po(m1_bridge,'Invariant  preservation',[event('IL_in'),invariant(inv4)],true),po(m1_bridge,'Invariant  preservation',[event('IL_in'),invariant(inv5)],true),po(m1_bridge,'Variant of event',[variant(m1_bridge),event('IL_in')],true),po(m1_bridge,'Natural number variant of event',[variant(m1_bridge),event('IL_in')],true),po(m1_bridge,'Invariant  preservation',[event('IL_out'),invariant(inv2)],true),po(m1_bridge,'Invariant  preservation',[event('IL_out'),invariant(inv3)],true),po(m1_bridge,'Invariant  preservation',[event('IL_out'),invariant(inv4)],true),po(m1_bridge,'Invariant  preservation',[event('IL_out'),invariant(inv5)],true),po(m1_bridge,'Variant of event',[variant(m1_bridge),event('IL_out')],true),po(m1_bridge,'Natural number variant of event',[variant(m1_bridge),event('IL_out')],true)],_Error)).
+
diff --git a/Bridge/visb_m0.json b/Bridge/visb_m0.json
new file mode 100644
index 0000000..d7e3dca
--- /dev/null
+++ b/Bridge/visb_m0.json
@@ -0,0 +1,55 @@
+{
+  "svg": "bridge_island_visualization.svg",
+  "items": [
+    {
+      "id": "nr_cars_on_island",
+      "attr": "text",
+      "value": "\"-\""
+    },
+    {
+      "id": "nr_cars_on_bridge_a",
+      "attr": "text",
+      "value": "\"-\""
+    },
+    {
+      "id": "nr_cars_on_bridge_c",
+      "attr": "text",
+      "value": "\"-\""
+    },
+    {
+      "id": "nr_cars_on_island_and_bridge",
+      "attr": "text",
+      "value": "FORMAT_TO_STRING(\"~w/~w\",[n,d])"
+    },
+    {
+      "id": "IL",
+      "attr": "stroke-width",
+      "value": "1+(10*n)/d",
+      "not-working-yet-value": "1.0 + 2.0*real(n)/real(d)"  
+    },
+    {
+      "id": "ml_tl",
+      "attr": "fill",
+      "value": "IF ENABLED(\"ML_out\")=TRUE THEN \"green\" ELSE \"red\" END"
+    },
+    {
+      "id": "il_tl",
+      "attr": "fill",
+      "value": "IF ENABLED(\"ML_in\")=TRUE THEN \"green\" ELSE \"red\" END"
+    }
+  ],
+  "events": [
+    {
+      "id": "IL",
+      "event": "ML_out",
+      "hovers": [{ "id": "ml_tl", "attr":"stroke-width", "enter":"6", "leave":"1"},
+                 { "id": "ml_tl", "attr":"opacity", "enter":"0.75", "leave":"1.0"}]
+    },
+    {
+      "id": "ML",
+      "event": "ML_in",
+      "hovers": [{ "id": "il_tl", "attr":"stroke-width", "enter":"6", "leave":"1"},
+                 { "id": "il_tl", "attr":"opacity", "enter":"0.75", "leave":"1.0"}]
+    }
+  ]
+}
diff --git a/Bridge/visb_m1.json b/Bridge/visb_m1.json
new file mode 100644
index 0000000..37d159f
--- /dev/null
+++ b/Bridge/visb_m1.json
@@ -0,0 +1,55 @@
+{
+  "svg": "bridge_island_visualization.svg",
+  "items": [
+    {
+      "id": "nr_cars_on_island",
+      "attr": "text",
+      "value": "b"
+    },
+    {
+      "id": "nr_cars_on_bridge_a",
+      "attr": "text",
+      "value": "a"
+    },
+    {
+      "id": "nr_cars_on_bridge_c",
+      "attr": "text",
+      "value": "c"
+    },
+    {
+      "id": "nr_cars_on_island_and_bridge",
+      "attr": "text",
+      "value": "FORMAT_TO_STRING(\"~w/~w\",[n,d])"
+    },
+    {
+      "id": "IL",
+      "attr": "stroke-width",
+      "value": "1+(10*b)/d",
+      "not-working-yet-value": "1.0 + 2.0*real(b)/real(d)"  
+    },
+    {
+      "id": "ml_tl",
+      "attr": "fill",
+      "value": "IF ENABLED(\"ML_out\")=TRUE THEN \"green\" ELSE \"red\" END"
+    },
+    {
+      "id": "il_tl",
+      "attr": "fill",
+      "value": "IF ENABLED(\"IL_out\")=TRUE THEN \"green\" ELSE \"red\" END"
+    }
+  ],
+  "events": [
+    {
+      "id": "IL",
+      "event": "ML_out",
+      "hovers": [{ "id": "ml_tl", "attr":"stroke-width", "enter":"6", "leave":"1"},
+                 { "id": "ml_tl", "attr":"opacity", "enter":"0.75", "leave":"1.0"}]
+    },
+    {
+      "id": "ML",
+      "event": "ML_in",
+      "hovers": [{ "id": "il_tl", "attr":"stroke-width", "enter":"6", "leave":"1"},
+                 { "id": "il_tl", "attr":"opacity", "enter":"0.75", "leave":"1.0"}]
+    }
+  ]
+}
-- 
GitLab