diff --git a/test/Makefile.inc b/test/Makefile.inc index bb7781da9ed4e821b1a03d9dec75652c2058f163..06aff70275d6d5e473b95de497319c92301eaa78 100644 --- a/test/Makefile.inc +++ b/test/Makefile.inc @@ -1,4 +1,4 @@ -# Time-stamp: <modified the 05/07/2019 (at 15:18) by Erwan Jahier> +# Time-stamp: <modified the 08/07/2019 (at 17:10) by Erwan Jahier> DIR=../../_build/install/default @@ -29,6 +29,6 @@ s:sim2chrogtk clean: rm -f *.cmxs sasa *.cm* *.o *.pdf *.rif *.gp *.log *.dro *.seed *.c sasa-*.dot - rm -f rdbg-session*.ml luretteSession*.ml *.lut a.out + rm -f rdbg-session*.ml luretteSession*.ml *.lut a.out *.cov ################################################################################## diff --git a/test/bfs-spanning-tree/Makefile b/test/bfs-spanning-tree/Makefile index 3df7594730d0247afd5f28498075d9d45207ce27..f14aaa5e318316195bc165cc5e1d24f3c99047e3 100644 --- a/test/bfs-spanning-tree/Makefile +++ b/test/bfs-spanning-tree/Makefile @@ -1,4 +1,4 @@ -# Time-stamp: <modified the 05/07/2019 (at 15:30) by Erwan Jahier> +# Time-stamp: <modified the 08/07/2019 (at 17:09) by Erwan Jahier> test: test0 test2 lurette0 lurette1 @@ -36,13 +36,6 @@ lurette1:cmxs fig5.1.lut fig5.1_oracle.lus -env "$(sasa) fig5.1.dot -dd -rif" \ -oracle "lv6 fig5.1_oracle.lus -n oracle" -lemma5.16:cmxs fig5.1-noinit.lut - rdbg -lurette -o lurette.rif \ - -env "$(sasa) fig5.1-noinit.dot -custd -rif" \ - -sut "lutin fig5.1-noinit.lut -n distributed" \ - -oracle "lv6 oracle_lemma5_16.lus -n oracle" - - lurette: lurette0 sim2chrogtk -ecran -in lurette.rif > /dev/null gnuplot-rif lurette.rif diff --git a/test/bfs-spanning-tree/bfs_spanning_tree_oracle.lus b/test/bfs-spanning-tree/bfs_spanning_tree_oracle.lus index 0077fb439b0655a62ea51c556a7e74039559471e..5c9ce4ae8f2cfc58c828d1e0403cee00c15d0e99 100644 --- a/test/bfs-spanning-tree/bfs_spanning_tree_oracle.lus +++ b/test/bfs-spanning-tree/bfs_spanning_tree_oracle.lus @@ -8,6 +8,7 @@ let theorem_5_18<<an,pn>> (Enab, Acti); tel +----------------------------------------------------------------------------- function first_element<<const an : int>> (X:bool^an) returns (res:bool); let res = X[0]; diff --git a/test/bfs-spanning-tree/fig5.1-noinit_oracle.lus b/test/bfs-spanning-tree/fig5.1-noinit_oracle.lus index 285de9c6cbd028d97bd4bcc2caa1aff332adb6d3..5c81c8cda9cdd6fce8f994525bd96ec7ffdb1f8f 100644 --- a/test/bfs-spanning-tree/fig5.1-noinit_oracle.lus +++ b/test/bfs-spanning-tree/fig5.1-noinit_oracle.lus @@ -1,28 +1,36 @@ +-- Automatically generated by /home/jahier/sasa/_build/default/src/sasaMain.exe version "2.10.0" ("a331f5b") +-- on crevetete the 8/7/2019 at 17:11:11 +--../../_build/install/default/bin/sasa -seed 42 -l 100 -glos fig5.1-noinit.dot include "bfs_spanning_tree_oracle.lus" +const an=2; -- actions number +const pn=8; -- processes number +const degree=3; +const min_degree=2; +const mean_degree=2.250000; +const diameter=4; +const card=8; +const links_number=9; +const is_cyclic=true; +const is_connected=true; +const is_a_tree=false; +const adjency=[ + [f,t,f,f,f,f,f,t], + [t,f,t,f,f,f,f,f], + [f,t,f,t,f,f,t,f], + [f,f,t,f,t,f,f,f], + [f,f,f,t,f,t,f,f], + [f,f,f,f,t,f,t,f], + [f,f,t,f,f,t,f,t], + [t,f,f,f,f,f,t,f]]; -const n=8; -const m=2; -const degree=2; -const diameter=8; - -node oracle(root_CD,root_CP,p1_CD,p1_CP,p2_CD,p2_CP,p3_CD,p3_CP,p4_CD,p4_CP,p5_CD,p5_CP, - p6_CD,p6_CP,p7_CD,p7_CP, - Enab_root_CD,Enab_root_CP,Enab_p1_CD,Enab_p1_CP,Enab_p2_CD,Enab_p2_CP, - Enab_p3_CD,Enab_p3_CP,Enab_p4_CD,Enab_p4_CP,Enab_p5_CD,Enab_p5_CP, - Enab_p6_CD,Enab_p6_CP,Enab_p7_CD,Enab_p7_CP - :bool) -returns (ok:bool); +node oracle(root_CD,root_CP,p1_CD,p1_CP,p2_CD,p2_CP,p3_CD,p3_CP,p4_CD,p4_CP,p5_CD,p5_CP,p6_CD,p6_CP,p7_CD,p7_CP,Enab_root_CD,Enab_root_CP,Enab_p1_CD,Enab_p1_CP,Enab_p2_CD,Enab_p2_CP,Enab_p3_CD,Enab_p3_CP,Enab_p4_CD,Enab_p4_CP,Enab_p5_CD,Enab_p5_CP,Enab_p6_CD,Enab_p6_CP,Enab_p7_CD,Enab_p7_CP:bool) returns (ok:bool); var Acti:bool^2^8; Enab:bool^2^8; let - Acti = [[root_CD,root_CP],[p1_CD,p1_CP],[p2_CD,p2_CP],[p3_CD,p3_CP],[p4_CD,p4_CP], - [p5_CD,p5_CP],[p6_CD,p6_CP],[p7_CD,p7_CP]]; - - Enab = [[Enab_root_CD,Enab_root_CP],[Enab_p1_CD,Enab_p1_CP],[Enab_p2_CD,Enab_p2_CP], - [Enab_p3_CD,Enab_p3_CP],[Enab_p4_CD,Enab_p4_CP],[Enab_p5_CD,Enab_p5_CP], - [Enab_p6_CD,Enab_p6_CP],[Enab_p7_CD,Enab_p7_CP]]; + Acti = [[root_CD,root_CP],[p1_CD,p1_CP],[p2_CD,p2_CP],[p3_CD,p3_CP],[p4_CD,p4_CP],[p5_CD,p5_CP],[p6_CD,p6_CP],[p7_CD,p7_CP]]; + Enab = [[Enab_root_CD,Enab_root_CP],[Enab_p1_CD,Enab_p1_CP],[Enab_p2_CD,Enab_p2_CP],[Enab_p3_CD,Enab_p3_CP],[Enab_p4_CD,Enab_p4_CP],[Enab_p5_CD,Enab_p5_CP],[Enab_p6_CD,Enab_p6_CP],[Enab_p7_CD,Enab_p7_CP]]; - ok = theorem_5_18<<m,n>>(Enab,Acti); -- from theorem 5.18 page 57 + ok = bfs_spanning_tree_oracle<<an,pn>>(Enab,Acti); tel diff --git a/test/bfs-spanning-tree/oracle_lemma5_16.lus b/test/bfs-spanning-tree/oracle_lemma5_16.lus deleted file mode 100644 index e1f1cd2139a2cd1d49cfd44228ef4ced842e6234..0000000000000000000000000000000000000000 --- a/test/bfs-spanning-tree/oracle_lemma5_16.lus +++ /dev/null @@ -1,21 +0,0 @@ -include "bfs_spanning_tree_oracle.lus" - -const n=8; -const m=2; -const degree=2; -const diameter=4; - - - -node oracle(root_CD,root_CP,p1_CD,p1_CP,p2_CD,p2_CP,p3_CD,p3_CP,p4_CD,p4_CP,p5_CD,p5_CP,p6_CD,p6_CP,p7_CD,p7_CP,Enab_root_CD,Enab_root_CP,Enab_p1_CD,Enab_p1_CP,Enab_p2_CD,Enab_p2_CP,Enab_p3_CD,Enab_p3_CP,Enab_p4_CD,Enab_p4_CP,Enab_p5_CD,Enab_p5_CP,Enab_p6_CD,Enab_p6_CP,Enab_p7_CD,Enab_p7_CP:bool) returns (ok:bool;); - -var - Acti:bool^2^8; - Enab:bool^2^8; -let - Acti = [[root_CD,root_CP],[p1_CD,p1_CP],[p2_CD,p2_CP],[p3_CD,p3_CP],[p4_CD,p4_CP],[p5_CD,p5_CP],[p6_CD,p6_CP],[p7_CD,p7_CP]]; - - Enab = [[Enab_root_CD,Enab_root_CP],[Enab_p1_CD,Enab_p1_CP],[Enab_p2_CD,Enab_p2_CP],[Enab_p3_CD,Enab_p3_CP],[Enab_p4_CD,Enab_p4_CP],[Enab_p5_CD,Enab_p5_CP],[Enab_p6_CD,Enab_p6_CP],[Enab_p7_CD,Enab_p7_CP]]; - - ok = lemma_5_16<<m,n>>(Enab,Acti) ; -tel diff --git a/test/coloring/Makefile b/test/coloring/Makefile index 6fdf340499bf96f4d9d0548b52ef71220bac9dc9..5417f0176f92acea4b5da0520a12a0d74360dba6 100644 --- a/test/coloring/Makefile +++ b/test/coloring/Makefile @@ -1,4 +1,4 @@ -# Time-stamp: <modified the 25/06/2019 (at 13:28) by Erwan Jahier> +# Time-stamp: <modified the 08/07/2019 (at 17:03) by Erwan Jahier> test: p.cmxs ring.lut lurette @@ -28,20 +28,10 @@ rdbg3: p.cma g.lut -env "$(sasa) g.dot -custd" \ -sut-nd "lutin g.lut -n distributed" -lurette:cmxs ring.lut +lurette:cmxs ring.lut ring_oracle.lus lurette \ -env "$(sasa) ring.dot -custd " \ -sut "lutin ring.lut -n distributed" \ + -oracle "lv6 ring_oracle.lus -n oracle " -lemma3.14:cmxs ring.lut - lurette \ - -env "$(sasa) ring.dot -custd " \ - -sut "lutin ring.lut -n distributed" \ - -oracle "lv6 oracle_lemma3_14.lus -n oracle " - -theorem3.17:cmxs ring.lut - lurette \ - -env "$(sasa) ring.dot -custd " \ - -sut "lutin ring.lut -n distributed" \ - -oracle "lv6 oracle_theorem3_17.lus -n oracle " -include ../Makefile.inc diff --git a/test/coloring/coloring_oracle.lus b/test/coloring/coloring_oracle.lus index b85f5c69a166272300c64e9e9665f12e484df42c..467302257313aa23abdf359e025fe916049cb34f 100644 --- a/test/coloring/coloring_oracle.lus +++ b/test/coloring/coloring_oracle.lus @@ -1,24 +1,31 @@ -include "../lustre/round.lus" +include "../lustre/oracle_utils.lus" ----------------------------------------------------------------------------- -node lemma_3_14<<const m : int; const n: int>> (Enab, Acti: bool^m^n) returns (res:bool); +node lemma_3_14<<const an:int; const pn: int>> (Enab, Acti: bool^an^pn) returns (res:bool); var MoveNb:int; let MoveNb = move_count(Acti); - res = MoveNb <= n-1; + res = MoveNb <= pn-1; tel ----------------------------------------------------------------------------- -node theorem_3_17<<const m : int; const n: int>> (Enab, Acti: bool^m^n) returns (res:bool); +node theorem_3_17<<const an:int; const pn:int>> (Enab, Acti: bool^an^pn) returns (res:bool); var Round:bool; RoundNb:int; let - Round = round <<m,n>>(Enab,Acti); + Round = round <<an,pn>>(Enab,Acti); RoundNb = count(Round); res = RoundNb <= 1; -- from theorem 3.17 page 29 tel + + +node coloring_oracle<<const an:int; const pn:int>> (Enab, Acti: bool^an^pn) +returns (res:bool); +let + res = lemma_3_14<<an,pn>>(Enab,Acti) and theorem_3_17<<an,pn>>(Enab,Acti); +tel diff --git a/test/coloring/oracle.lus b/test/coloring/oracle.lus deleted file mode 100644 index c0d6bc7f35acb000154ec5f2b3377dad1d4dcf7e..0000000000000000000000000000000000000000 --- a/test/coloring/oracle.lus +++ /dev/null @@ -1,30 +0,0 @@ - -node silence(Enab_p1_conflict, - Enab_p2_conflict, - Enab_p3_conflict, - Enab_p4_conflict, - Enab_p5_conflict, - Enab_p6_conflict, - Enab_p7_conflict:bool; - p1_conflict, - p2_conflict, - p3_conflict, - p4_conflict, - p5_conflict, - p6_conflict, - p7_conflict:bool -) -returns(ok:bool); -var - cpt:int; -let - cpt = 0 -> pre cpt + 1; - ok= (cpt < 7) or -- lemma 3.14 - nor(Enab_p1_conflict, - Enab_p2_conflict, - Enab_p3_conflict, - Enab_p4_conflict, - Enab_p5_conflict, - Enab_p6_conflict, - Enab_p7_conflict); -tel diff --git a/test/coloring/oracle_lemma3_14.lus b/test/coloring/oracle_lemma3_14.lus deleted file mode 100644 index 30ed692cf113c473b0c078be428f46c4638f5cda..0000000000000000000000000000000000000000 --- a/test/coloring/oracle_lemma3_14.lus +++ /dev/null @@ -1,19 +0,0 @@ - -include "coloring_oracle.lus" - -const n=7; -const m=1; -const degree=0; -const diameter=0; - - -node oracle(p1_conflict,p2_conflict,p3_conflict,p4_conflict,p5_conflict,p6_conflict,p7_conflict,Enab_p1_conflict,Enab_p2_conflict,Enab_p3_conflict,Enab_p4_conflict,Enab_p5_conflict,Enab_p6_conflict,Enab_p7_conflict:bool) returns (ok:bool); -var - Acti:bool^1^7; - Enab:bool^1^7; -let - Acti = [[p1_conflict],[p2_conflict],[p3_conflict],[p4_conflict],[p5_conflict],[p6_conflict],[p7_conflict]]; - - Enab = [[Enab_p1_conflict],[Enab_p2_conflict],[Enab_p3_conflict],[Enab_p4_conflict],[Enab_p5_conflict],[Enab_p6_conflict],[Enab_p7_conflict]]; - ok = lemma_3_14<<m,n>>(Enab,Acti); -- from Lemma 3.14 page 29 -tel diff --git a/test/coloring/oracle_theorem3_17.lus b/test/coloring/oracle_theorem3_17.lus deleted file mode 100644 index dcd87e703658dd7243da808b52e0c4e09ff3195a..0000000000000000000000000000000000000000 --- a/test/coloring/oracle_theorem3_17.lus +++ /dev/null @@ -1,19 +0,0 @@ - -include "coloring_oracle.lus" - -const n=7; -const m=1; -const degree=0; -const diameter=0; - - -node oracle(p1_conflict,p2_conflict,p3_conflict,p4_conflict,p5_conflict,p6_conflict,p7_conflict,Enab_p1_conflict,Enab_p2_conflict,Enab_p3_conflict,Enab_p4_conflict,Enab_p5_conflict,Enab_p6_conflict,Enab_p7_conflict:bool) returns (ok:bool); -var - Acti:bool^1^7; - Enab:bool^1^7; -let - Acti = [[p1_conflict],[p2_conflict],[p3_conflict],[p4_conflict],[p5_conflict],[p6_conflict],[p7_conflict]]; - - Enab = [[Enab_p1_conflict],[Enab_p2_conflict],[Enab_p3_conflict],[Enab_p4_conflict],[Enab_p5_conflict],[Enab_p6_conflict],[Enab_p7_conflict]]; - ok = theorem_3_17<<m,n>>(Enab,Acti); -- from theorem 3.17 -tel diff --git a/test/coloring/ring_oracle.lus b/test/coloring/ring_oracle.lus new file mode 100644 index 0000000000000000000000000000000000000000..687acb0ca71f394f1b4b3cd1c484cebddd63ec36 --- /dev/null +++ b/test/coloring/ring_oracle.lus @@ -0,0 +1,35 @@ +-- Automatically generated by /home/jahier/sasa/_build/default/src/sasaMain.exe version "2.10.0" ("a331f5b") +-- on crevetete the 8/7/2019 at 16:59:24 +--../../_build/install/default/bin/sasa -seed 42 -l 100 -glos ring.dot + +include "coloring_oracle.lus" +const an=1; -- actions number +const pn=7; -- processes number +const degree=2; +const min_degree=2; +const mean_degree=2.000000; +const diameter=3; +const card=7; +const links_number=7; +const is_cyclic=true; +const is_connected=true; +const is_a_tree=false; +const adjency=[ + [f,t,f,f,f,f,t], + [t,f,t,f,f,f,f], + [f,t,f,t,f,f,f], + [f,f,t,f,t,f,f], + [f,f,f,t,f,t,f], + [f,f,f,f,t,f,t], + [t,f,f,f,f,t,f]]; + +node oracle(p1_conflict,p2_conflict,p3_conflict,p4_conflict,p5_conflict,p6_conflict,p7_conflict,Enab_p1_conflict,Enab_p2_conflict,Enab_p3_conflict,Enab_p4_conflict,Enab_p5_conflict,Enab_p6_conflict,Enab_p7_conflict:bool) returns (ok:bool); +var + Acti:bool^1^7; + Enab:bool^1^7; +let + Acti = [[p1_conflict],[p2_conflict],[p3_conflict],[p4_conflict],[p5_conflict],[p6_conflict],[p7_conflict]]; + Enab = [[Enab_p1_conflict],[Enab_p2_conflict],[Enab_p3_conflict],[Enab_p4_conflict],[Enab_p5_conflict],[Enab_p6_conflict],[Enab_p7_conflict]]; + + ok = coloring_oracle<<an,pn>>(Enab,Acti); +tel diff --git a/test/dijkstra-ring/Makefile b/test/dijkstra-ring/Makefile index a1995f4ec1be147e269fe36a221e3a7b392aefad..64222dff6ae00e5c651f7866ddbe7fae56f10152 100644 --- a/test/dijkstra-ring/Makefile +++ b/test/dijkstra-ring/Makefile @@ -1,4 +1,4 @@ -# Time-stamp: <modified the 07/06/2019 (at 10:05) by Erwan Jahier> +# Time-stamp: <modified the 08/07/2019 (at 17:17) by Erwan Jahier> test: cmxs lurette1 @@ -20,23 +20,13 @@ rdbg: cmxs ring.lut -sut-nd "lutin ring.lut -n distributed"\ -lurette1:cmxs ring.lut +lurette1:cmxs ring.lut ring_oracle.lus lurette \ -env "$(sasa) ring.dot -custd " \ -sut "lutin ring.lut -n distributed" \ - -lemma6.28:cmxs ring.lut - lurette \ - -env "$(sasa) ring.dot -custd " \ - -sut "lutin ring.lut -n distributed" \ - -oracle "lv6 oracle_lemma6_28.lus -n oracle " - -theorem6.29:cmxs ring.lut - lurette \ - -env "$(sasa) ring.dot -custd " \ - -sut "lutin ring.lut -n distributed" \ - -oracle "lv6 oracle_theorem6_29.lus -n oracle " - + -oracle "lv6 ring_oracle.lus -n oracle" -include ../Makefile.inc +lclean: clean + rm -f ring_oracle.lus diff --git a/test/dijkstra-ring/oracle_lemma6_28.lus b/test/dijkstra-ring/oracle_lemma6_28.lus deleted file mode 100644 index 1a3645da446ea742c27bce57aa41fb48993b8827..0000000000000000000000000000000000000000 --- a/test/dijkstra-ring/oracle_lemma6_28.lus +++ /dev/null @@ -1,20 +0,0 @@ - -include "dijkstra_ring.lus" - -const n=8; -const m=1; -const degree=0; -const diameter=0; - - -node oracle(p1_a,p2_a,p3_a,p4_a,p5_a,p6_a,p7_a,p8_a,Enab_p1_a,Enab_p2_a,Enab_p3_a,Enab_p4_a,Enab_p5_a,Enab_p6_a,Enab_p7_a,Enab_p8_a:bool) returns (ok:bool); -var - Acti:bool^1^8; - Enab:bool^1^8; -let - Acti = [[p1_a],[p2_a],[p3_a],[p4_a],[p5_a],[p6_a],[p7_a],[p8_a]]; - - Enab = [[Enab_p1_a],[Enab_p2_a],[Enab_p3_a],[Enab_p4_a],[Enab_p5_a],[Enab_p6_a],[Enab_p7_a],[Enab_p8_a]]; - - ok = lemma_6_28<<m,n>>(Enab,Acti) ; -- Lemma 6.28 -tel diff --git a/test/dijkstra-ring/oracle_theorem6_29.lus b/test/dijkstra-ring/oracle_theorem6_29.lus deleted file mode 100644 index 8d7c8e378f8334f9d9a2f8c04d451a11b6d2bc8e..0000000000000000000000000000000000000000 --- a/test/dijkstra-ring/oracle_theorem6_29.lus +++ /dev/null @@ -1,21 +0,0 @@ - -include "dijkstra_ring.lus" - -const n=8; -const m=1; -const degree=0; -const diameter=0; -const k = 42; - - -node oracle(p1_a,p2_a,p3_a,p4_a,p5_a,p6_a,p7_a,p8_a,Enab_p1_a,Enab_p2_a,Enab_p3_a,Enab_p4_a,Enab_p5_a,Enab_p6_a,Enab_p7_a,Enab_p8_a:bool) returns (ok:bool); -var - Acti:bool^1^8; - Enab:bool^1^8; -let - Acti = [[p1_a],[p2_a],[p3_a],[p4_a],[p5_a],[p6_a],[p7_a],[p8_a]]; - - Enab = [[Enab_p1_a],[Enab_p2_a],[Enab_p3_a],[Enab_p4_a],[Enab_p5_a],[Enab_p6_a],[Enab_p7_a],[Enab_p8_a]]; - - ok = theorem_6_29<<m,n>>(Enab,Acti) ; -- Theorem 6.29 -tel diff --git a/test/dijkstra-ring/ring.dot b/test/dijkstra-ring/ring.dot index 9a3a12ee04f2f9a8ffe25bf7b15c957690d7c9be..8466e481aa26607b534dce4f85bb79471916f51b 100644 --- a/test/dijkstra-ring/ring.dot +++ b/test/dijkstra-ring/ring.dot @@ -1,4 +1,5 @@ digraph ring7 { + graph [k=3] p1 [algo="ringroot.ml" init="v=1" ] p2 [algo="ring.ml" init="v=3" ] diff --git a/test/lustre/round.lus b/test/lustre/round.lus index db2606b22011024b7ad588e6de839191186fce38..ed7eebd0cad48aefd499f2a3023340e3f3faeaa0 100644 --- a/test/lustre/round.lus +++ b/test/lustre/round.lus @@ -1,4 +1,4 @@ --- -- Time-stamp: <modified the 08/07/2019 (at 15:28) by Erwan Jahier> +-- -- Time-stamp: <modified the 08/07/2019 (at 17:04) by Erwan Jahier> -- -- Computing rounds in Lustre -- The inputs are 2 arrays Enab and Acti, where: @@ -19,7 +19,7 @@ let res = boolred<<0,0,pn>>(mask); -- when all are false, tel -node mask_init <<const an:int; const pn:int>> (E,A: bool^an^pn) returns (res : bool^pn); +function mask_init <<const an:int; const pn:int>> (E,A: bool^an^pn) returns (res : bool^pn); var enab:bool^pn; -- at least one action is enabled acti:bool^pn; -- at least one action is active @@ -34,7 +34,7 @@ let res = not(a=>b); tel -node mask_update<<const an: int; const pn: int>> (E,A: bool^an^pn; pmask:bool^pn) +function mask_update<<const an: int; const pn: int>> (E,A: bool^an^pn; pmask:bool^pn) returns (res : bool^pn); var acti:bool^pn; -- at least one action is active diff --git a/test/lustre/utils.lus b/test/lustre/utils.lus index 19422a13a05802c66a19a09a4b77c25a03519f3a..8032b57df5053f24a84c00203da2b69275b3fb25 100644 --- a/test/lustre/utils.lus +++ b/test/lustre/utils.lus @@ -30,26 +30,30 @@ node map_and<<const n:int>> (X,Y:bool^n) returns (Z:bool^n); let Z = map<<and,n>>(X,Y) ; tel +node map_or<<const n:int>> (X,Y:bool^n) returns (Z:bool^n); +let + Z = map<<or,n>>(X,Y) ; +tel ----------------------------------------------------------------------------- node implies_list(A,B:bool^m) returns (res:bool^m); let - res = map<<=>,an>>(A,B) ; + res = map<<=>,m>>(A,B) ; tel ----------------------------------------------------------------------------- -node one_true (tab:bool^an^pn) returns (res:bool); +node one_true <<const m:int ; const n:int>> (tab:bool^m^n) returns (res:bool); let - res = (((red<<count_true_acc<<an>>,pn>>(0,tab)))=1); + res = (((red<<count_true_acc<<m>>,n>>(0,tab)))=1); tel ----------------------------------------------------------------------------- -node all_true (t:bool^m^n) returns (res:bool); +node all_true <<const m:int ; const n:int>>(t:bool^m^n) returns (res:bool); let res = boolred<<m,m,m>>((red<<map_and<<m>>,n>>(true^m,t))) ; tel -node all_false (t:bool^m^n) returns (res:bool); +node all_false <<const m:int ; const n:int>>(t:bool^m^n) returns (res:bool); let res = boolred<<0,0,m>>((red<<map_or<<m>>,n>>(false^m,t))) ; tel diff --git a/test/unison/Makefile b/test/unison/Makefile index a2ff818ae9fbc7b5766b8d949a35ba6a33710e9b..4fee40a63af4e87d35a8368238401510808070c0 100644 --- a/test/unison/Makefile +++ b/test/unison/Makefile @@ -1,4 +1,4 @@ -# Time-stamp: <modified the 07/06/2019 (at 17:36) by Erwan Jahier> +# Time-stamp: <modified the 08/07/2019 (at 17:27) by Erwan Jahier> test: test1 test2 lurette0 @@ -21,23 +21,11 @@ luciole: luciole-rif $(sasa) ring.dot -custd -rif -ifi -lurette0:cmxs ring.lut +lurette0:cmxs ring.lut ring_oracle.lus lurette -o lurette.rif \ -env "$(sasa) ring.dot -custd -rif" \ - -sut "lutin ring.lut -n synchronous" - -lemma4_10:cmxs ring.lut - lurette -o lurette.rif \ - -env "$(sasa) ring.dot -custd -rif" \ - -sut "lutin ring.lut -n synchronous" \ - -oracle "lv6 oracle_lemma4_10.lus -n oracle" - -theorem4_11:cmxs ring.lut - lurette -o lurette.rif \ - -env "$(sasa) ring.dot -custd -rif" \ - -sut "lutin ring.lut -n synchronous" \ - -oracle "lv6 oracle_theorem4_11.lus -n oracle" - + -sut "lutin ring.lut -n synchronous" \ + -oracle "lv6 ring_oracle.lus -n oracle" lurette: lurette0 s g @@ -47,3 +35,6 @@ rdbg: unison.cma unison.cmxs ring.lut -sut-nd "lutin ring.lut -n synchronous" -include ../Makefile.inc + +lclean: clean + rm -f ring_oracle.lus diff --git a/test/unison/oracle_lemma4_10.lus b/test/unison/oracle_lemma4_10.lus deleted file mode 100644 index 0f309c888573c73f7b367ddb39b4c783f5b21387..0000000000000000000000000000000000000000 --- a/test/unison/oracle_lemma4_10.lus +++ /dev/null @@ -1,19 +0,0 @@ -include "unison_oracle.lus" - -const n=7; -const m=1; -const degree=0; -const diameter=3; - - -node oracle(p1_g,p2_g,p3_g,p4_g,p5_g,p6_g,p7_g,Enab_p1_g,Enab_p2_g,Enab_p3_g,Enab_p4_g,Enab_p5_g,Enab_p6_g,Enab_p7_g:bool) returns (ok:bool); -var - Acti:bool^1^7; - Enab:bool^1^7; -let - Acti = [[p1_g],[p2_g],[p3_g],[p4_g],[p5_g],[p6_g],[p7_g]]; - - Enab = [[Enab_p1_g],[Enab_p2_g],[Enab_p3_g],[Enab_p4_g],[Enab_p5_g],[Enab_p6_g],[Enab_p7_g]]; - - ok = lemma_4_10<<m,n>>(Enab,Acti) ; -- from Lemma 4.10 page 40 -tel diff --git a/test/unison/oracle_theorem4_11.lus b/test/unison/oracle_theorem4_11.lus deleted file mode 100644 index b957e9aaefd80146b47dd0a65cf3b3a5efccb3ce..0000000000000000000000000000000000000000 --- a/test/unison/oracle_theorem4_11.lus +++ /dev/null @@ -1,21 +0,0 @@ -include "unison_oracle.lus" - -const n=7; -const m=1; -const degree=0; -const diameter=3; -const max_clock =10 ; -const is_connected = true; - - - -node oracle(p1_g,p2_g,p3_g,p4_g,p5_g,p6_g,p7_g,Enab_p1_g,Enab_p2_g,Enab_p3_g,Enab_p4_g,Enab_p5_g,Enab_p6_g,Enab_p7_g:bool) returns (ok:bool); -var - Acti:bool^1^7; - Enab:bool^1^7; -let - Acti = [[p1_g],[p2_g],[p3_g],[p4_g],[p5_g],[p6_g],[p7_g]]; - - Enab = [[Enab_p1_g],[Enab_p2_g],[Enab_p3_g],[Enab_p4_g],[Enab_p5_g],[Enab_p6_g],[Enab_p7_g]]; - ok = theorem_4_11<<m,n>>(Enab,Acti,is_connected,max_clock); -- from theorem 4.11 page 40 -tel diff --git a/test/unison/ring.dot b/test/unison/ring.dot index 188917b7cf5311ebd87093c3ed254db469d2396a..c7c94ca656eb662599e07266d45695b3429b9c26 100644 --- a/test/unison/ring.dot +++ b/test/unison/ring.dot @@ -1,5 +1,5 @@ graph ring7 { - graph [diameter=7] + graph [max_clock=10] p1 [algo="unison.ml"] p2 [algo="unison.ml" ] diff --git a/test/unison/round.lus b/test/unison/round.lus deleted file mode 100644 index 94dfbc6bf42973a7e7027e594bffb55ee7368285..0000000000000000000000000000000000000000 --- a/test/unison/round.lus +++ /dev/null @@ -1,132 +0,0 @@ --- -- Time-stamp: <modified the 26/06/2019 (at 15:13) by Erwan Jahier> --- --- Computing rounds in Lustre --- The inputs are 2 arrays Enab and Acti, where: --- - Enab[i][j] is true iff action i of process j is enabled --- - Acti[i][j] is true iff action i of process j is active - --- n holds the number of processes --- m holds the number of actions per process -node round<<const m : int; const n: int>> (Enab, Acti: bool^m^n) returns (res:bool); -var - mask: bool^n; - pres: bool; -let - pres = true -> pre res; - mask = merge pres (true -> mask_init<<m, n>> (Enab, Acti) when pres) - (false -> mask_update<<m, n>>(Enab, Acti, pre mask) when not pres); - - res = boolred<<0,0,n>>(mask); -- when all are false, -tel - -node mask_init <<const m:int; const n:int>> (E,A: bool^m^n) returns (res : bool^n); -var - enab:bool^n; -- at least one action is enabled - acti:bool^n; -- at least one action is active -let - enab = map<< red<<or, m>>, n >>(false^n, E); - acti = map<< red<<or, m>>, n >>(false^n, A); - res = map<<not_implies, n>>(enab,acti); -tel - -function not_implies(a,b:bool) returns (res:bool); -let - res = not(a=>b); -tel - -node mask_update<<const m: int; const n: int>> (E,A: bool^m^n; pmask:bool^n) returns (res : bool^n); -var - acti:bool^n; -- at least one action is active -let - acti = map<< red<<or, m>>, n >>(false^n, A); - res = map<<not_implies, n>>(pmask,acti); -tel - - -node test53=round<< 5,3 >> -node test52=round<< 5,2 >> - ------------------------------------------------------------------------------ -node count(x:bool) returns(cpt:int); -let - cpt = 0 -> if x then pre cpt + 1 else pre cpt; -tel ------------------------------------------------------------------------------ - -node silent<<const m: int; const n: int>> (Enab: bool^m^n) returns (ok:bool); -var - enab:bool^n; -- at least one action is enabled -let - enab = map<< red<<or, m>>, n >>(false^n, Enab); - ok = not(red<<or, n>>(false, enab)); -tel - ------------------------------------------------------------------------------ -node after_n(n:int; x:bool) returns (res:bool); -var cpt:int; -let - cpt = 0 -> pre cpt + 1; - res = cpt <= n or x; -tel - ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -node bool_to_int(X:int; Y:bool) returns (Z:int); -let - Z = if(Y) then X+1 else X; -tel - ------------------------------------------------------------------------------ -node map_and (X,Y:bool^m) returns (Z:bool^m); -let - Z = map<<and,m>>(X,Y) ; -tel - ------------------------------------------------------------------------------ -node implies_list(A,B:bool^m) returns (res:bool^m); -let - res = map<<=>,m>>(A,B) ; -tel - ------------------------------------------------------------------------------ -node add_int_true(X:int; Y:bool^m) returns (Z:int); -let - Z = red<<bool_to_int,m>>(X,Y); -tel - ------------------------------------------------------------------------------ -node one_true (tab:bool^m^n) returns (res:bool); -let - res = (((red<<add_int_true,n>>(0,tab)))=1); -tel - ------------------------------------------------------------------------------ -node all_true (tab_acti:bool^m^n) returns (res:bool); -let - res = boolred<<m,m,m>>((red<<map_and,n>>(true^m,tab_acti))) ; -tel - ------------------------------------------------------------------------------ -node compt_move (tab_acti:bool^m^n) returns (nb_act:int); -let - nb_act = 0 -> pre(nb_act) + (red<<add_int_true,n>>(0,tab_acti)); -tel - ------------------------------------------------------------------------------ -node is_distributed(acti,enab:bool^m^n) returns (res:bool); -let - res = true -> (((red<<add_int_true,n>>(0,acti))>=1) or silent<<m,n>>(enab)) and pre(res); -tel - ------------------------------------------------------------------------------ -node is_central(acti:bool^m^n) returns (res:bool); -let - res = true -> (one_true(acti)) and pre(res); -tel - ------------------------------------------------------------------------------ -node is_synchronous(enab,acti:bool^m^n) returns (res:bool); -let - res = true -> all_true(map<<implies_list,n>>(enab,acti)) and pre(res); -tel - diff --git a/test/unison/unison.ml b/test/unison/unison.ml index 6916347978bab520da05db445e7b8e12da8e9e94..3c709010fd574acda46be7db5f336a8b7f0fe6c9 100644 --- a/test/unison/unison.ml +++ b/test/unison/unison.ml @@ -1,9 +1,9 @@ -(* Time-stamp: <modified the 03/07/2019 (at 10:29) by Erwan Jahier> *) +(* Time-stamp: <modified the 08/07/2019 (at 17:28) by Erwan Jahier> *) open Algo (* let m=10 (* max 2 (1+2*diameter ()) *) *) -let diameter = int_of_string (get_graph_attribute "diameter") +let diameter = Algo.diameter () let m = max 2 (1+2*diameter) diff --git a/test/unison/unison_oracle.lus b/test/unison/unison_oracle.lus index f6b98e291c4a9f9cd95bb6c31cd3ccb958f7c77b..d82c3b5e23d784296f2b48cd3bf21a6768aa92f8 100644 --- a/test/unison/unison_oracle.lus +++ b/test/unison/unison_oracle.lus @@ -1,28 +1,37 @@ -include "../lustre/round.lus" - +include "../lustre/oracle_utils.lus" ----------------------------------------------------------------------------- - -node theorem_4_11<<const m : int; const n: int>> (Enab, Acti: bool^m^n;is_connected:bool;max_clock:int) returns (res:bool); +node theorem_4_11<<const an:int; const pn:int>> (Enab, Acti: bool^an^pn) +returns (res:bool); var nb_step:int; All_Acti:bool; let nb_step = 1 -> pre(nb_step) + 1 ; - All_Acti = all_true(Acti); - res =((max_clock>= (2*diameter-1)) and is_connected) => (nb_step>=(3*diameter-2)) => All_Acti ; -- Theorem 4.11 page 40 + All_Acti = all_true<<an,pn>>(Acti); + res = ((max_clock>= (2*diameter-1)) and is_connected) + => (nb_step>=(3*diameter-2)) => All_Acti ; -- Theorem 4.11 page 40 tel ----------------------------------------------------------------------------- - -node lemma_4_10<<const m : int; const n: int>> (Enab, Acti: bool^m^n) returns (res:bool); +node lemma_4_10<<const an: int; const pn:int>> (Enab, Acti: bool^an^pn) +returns (res:bool); var nb_step:int; All_Acti:bool; Silent:bool; let nb_step = 0 -> pre nb_step + 1 ; - Silent = silent<<m,n>>(Enab); - All_Acti = all_true(Acti); + Silent = silent<<an,pn>>(Enab); + All_Acti = all_true<<an,pn>>(Acti); res = (nb_step>=((3*diameter)-2)) => All_Acti ; -- from Lemma 4.10 page 40 -tel \ No newline at end of file +tel + +----------------------------------------------------------------------------- +node unison_oracle<<const an:int; const pn:int>> (Enab, Acti: bool^an^pn) +returns (ok:bool); +let + + ok = lemma_4_10 <<an,pn>> (Enab, Acti) and + theorem_4_11<<an,pn>> (Enab, Acti); +tel