Browse Source
Tidy up mutual (and add pp files).
Tidy up mutual (and add pp files).
git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@679 bbc10eb1-c90d-0410-af57-cb519fbb1720master
14 changed files with 201 additions and 261 deletions
-
7prism-examples/mutual/.autopp
-
66prism-examples/mutual/.mutualN.nm.pp
-
10prism-examples/mutual/auto
-
18prism-examples/mutual/mutual.pctl
-
39prism-examples/mutual/mutual10.nm
-
68prism-examples/mutual/mutual10.pctl
-
25prism-examples/mutual/mutual3.nm
-
25prism-examples/mutual/mutual3.pctl
-
27prism-examples/mutual/mutual4.nm
-
29prism-examples/mutual/mutual4.pctl
-
29prism-examples/mutual/mutual5.nm
-
33prism-examples/mutual/mutual5.pctl
-
35prism-examples/mutual/mutual8.nm
-
51prism-examples/mutual/mutual8.pctl
@ -0,0 +1,7 @@ |
|||
#!/bin/csh |
|||
|
|||
foreach N ( 3 4 5 8 10 ) |
|||
echo "Generating for N=$N" |
|||
prismpp .mutualN.nm.pp $N >! mutual"$N".nm |
|||
unix2dos mutual"$N".nm |
|||
end |
|||
@ -0,0 +1,66 @@ |
|||
#const N# |
|||
// mutual exclusion [PZ82] |
|||
// dxp/gxn 19/12/99 |
|||
|
|||
mdp |
|||
|
|||
// atomic formula |
|||
// none in low, high, tie |
|||
formula none_lht = #& i=2:N#!(p#i#>=4&p#i#<=13)#end#; |
|||
// some in admit |
|||
formula some_a = #| i=2:N#(p#i#>=14&p#i#<=15)#end#; |
|||
// some in high, admit |
|||
formula some_ha = #| i=2:N#(p#i#>=4&p#i#<=5|p#i#>=10&p#i#<=15)#end#; |
|||
// none in high, tie, admit |
|||
formula none_hta = #& i=2:N#(p#i#>=0&p#i#<=3|p#i#>=7&p#i#<=8)#end#; |
|||
// none in enter |
|||
formula none_e = #& i=2:N#!(p#i#>=2&p#i#<=3)#end#; |
|||
|
|||
|
|||
module process1 |
|||
|
|||
p1: [0..15]; |
|||
|
|||
[] p1=0 -> (p1'=0); |
|||
[] p1=0 -> (p1'=1); |
|||
[] p1=1 -> (p1'=2); |
|||
[] p1=2 & (none_lht | some_a) -> (p1'=3); |
|||
[] p1=2 & !(none_lht | some_a) -> (p1'=2); |
|||
[] p1=3 -> (p1'=4); |
|||
[] p1=3 -> (p1'=7); |
|||
[] p1=4 & some_ha -> (p1'=5); |
|||
[] p1=4 & !some_ha -> (p1'=10); |
|||
[] p1=5 -> (p1'=6); |
|||
[] p1=6 & some_ha -> (p1'=6); |
|||
[] p1=6 & !some_ha -> (p1'=9); |
|||
[] p1=7 & none_hta -> (p1'=8); |
|||
[] p1=7 & !none_hta -> (p1'=7); |
|||
[] p1=8 -> (p1'=9); |
|||
[] p1=9 -> 0.5 : (p1'=4) + 0.5 : (p1'=7); |
|||
[] p1=10 -> (p1'=11); |
|||
[] p1=11 & none_lht -> (p1'=13); |
|||
[] p1=11 & !none_lht -> (p1'=12); |
|||
[] p1=12 -> (p1'=0); |
|||
[] p1=13 -> (p1'=14); |
|||
[] p1=14 & none_e -> (p1'=15); |
|||
[] p1=14 & !none_e -> (p1'=14); |
|||
[] p1=15 -> (p1'=0); |
|||
|
|||
endmodule |
|||
|
|||
// construct further modules through renaming |
|||
|
|||
#for i=2:N# |
|||
module process#i# = process1 [ p1=p#i#, p#i#=p1 ] endmodule |
|||
#end# |
|||
|
|||
// formulas/labels for properties |
|||
|
|||
// number of procs in critical section |
|||
formula num_crit = #+ i=1:N#p#1#>9?1:0#end#; |
|||
// some process is between 4 and 13 |
|||
label "some_4_13" = #| i=1:N#(p#i#>=4&p#i#<=13)#end#; |
|||
// some process is in 14 |
|||
label "some_14" = #| i=1:N#(p#i#=14)#end#; |
|||
|
|||
|
|||
@ -1,7 +1,7 @@ |
|||
#!/bin/csh |
|||
|
|||
prism mutual3.nm mutual3.pctl -fair |
|||
prism mutual4.nm mutual4.pctl -fair |
|||
prism mutual5.nm mutual5.pctl -fair |
|||
prism mutual8.nm mutual8.pctl -fair |
|||
prism mutual10.nm mutual10.pctl -fair |
|||
prism mutual3.nm mutual.pctl -fair |
|||
prism mutual4.nm mutual.pctl -fair |
|||
prism mutual5.nm mutual.pctl -fair |
|||
prism mutual8.nm mutual.pctl -fair |
|||
prism mutual10.nm mutual.pctl -fair |
|||
@ -0,0 +1,18 @@ |
|||
// Theorem 1 (mutual exclusion) |
|||
|
|||
num_crit <= 1 |
|||
|
|||
// Lemma C |
|||
// If the crical section is occupied then eventually it becomes clear |
|||
|
|||
num_crit > 0 => P>=1 [ F num_crit = 0 ] |
|||
|
|||
// Lemma D |
|||
// If a process is between 4 and 13 (in our version) then eventually some process gets to 14 |
|||
|
|||
"some_4_13" => P>=1 [ F "some_14" ] |
|||
|
|||
// Theorem 2 (liveness) |
|||
// If process 1 tries then eventually it enters the critical section |
|||
|
|||
p1=1 => P>=1 [ F p1=10 ] |
|||
@ -1,68 +0,0 @@ |
|||
// theorem 1 (mutual exclusion) |
|||
|
|||
(!((p1>9) & (p2>9))) & |
|||
(!((p1>9) & (p3>9))) & |
|||
(!((p1>9) & (p4>9))) & |
|||
(!((p1>9) & (p5>9))) & |
|||
(!((p1>9) & (p6>9))) & |
|||
(!((p1>9) & (p7>9))) & |
|||
(!((p1>9) & (p8>9))) & |
|||
(!((p1>9) & (p9>9))) & |
|||
(!((p1>9) & (p10>9))) & |
|||
(!((p2>9) & (p3>9))) & |
|||
(!((p2>9) & (p4>9))) & |
|||
(!((p2>9) & (p5>9))) & |
|||
(!((p2>9) & (p6>9))) & |
|||
(!((p2>9) & (p7>9))) & |
|||
(!((p2>9) & (p8>9))) & |
|||
(!((p2>9) & (p9>9))) & |
|||
(!((p2>9) & (p10>9))) & |
|||
(!((p3>9) & (p4>9))) & |
|||
(!((p3>9) & (p5>9))) & |
|||
(!((p3>9) & (p6>9))) & |
|||
(!((p3>9) & (p7>9))) & |
|||
(!((p3>9) & (p8>9))) & |
|||
(!((p3>9) & (p9>9))) & |
|||
(!((p3>9) & (p10>9))) & |
|||
(!((p4>9) & (p5>9))) & |
|||
(!((p4>9) & (p6>9))) & |
|||
(!((p4>9) & (p7>9))) & |
|||
(!((p4>9) & (p8>9))) & |
|||
(!((p4>9) & (p9>9))) & |
|||
(!((p4>9) & (p10>9))) & |
|||
(!((p5>9) & (p6>9))) & |
|||
(!((p5>9) & (p7>9))) & |
|||
(!((p5>9) & (p8>9))) & |
|||
(!((p5>9) & (p9>9))) & |
|||
(!((p5>9) & (p10>9))) & |
|||
(!((p6>9) & (p7>9))) & |
|||
(!((p6>9) & (p8>9))) & |
|||
(!((p6>9) & (p9>9))) & |
|||
(!((p6>9) & (p10>9))) & |
|||
(!((p7>9) & (p8>9))) & |
|||
(!((p7>9) & (p9>9))) & |
|||
(!((p7>9) & (p10>9))) & |
|||
(!((p8>9) & (p9>9))) & |
|||
(!((p8>9) & (p10>9))) & |
|||
(!((p9>9) & (p10>9))) |
|||
|
|||
// lemma c |
|||
// if the crical section is occupied then eventually it becomes clear |
|||
|
|||
(p1>9) | (p2>9) | (p3>9) | (p4>9) | (p5>9) | (p6>9) | (p7>9) | (p8>9) | (p9>9) | (p10>9) => |
|||
P>=1 [ true U (p1<10) & (p2<10) & (p3<10) & (p4<10) & (p5<10) & (p6<10) & (p7<10) & (p8<10) & (p9<10) & (p10<10) ] |
|||
|
|||
// lemma d |
|||
// if a process is between 4 and 13 (in our version) then eventually some process gets to 14 |
|||
|
|||
((p1>3) & (p1<14)) | ((p2>3) & (p2<14)) | ((p3>3) & (p3<14)) | ((p4>3) & (p4<14)) | ((p5>3) & (p5<14)) | ((p6>3) & (p6<14)) | ((p7>3) & (p7<14)) | ((p8>3) & (p8<14)) | ((p9>3) & (p9<14)) | ((p10>3) & (p10<14)) => |
|||
P>=1 [ true U (p1=14) | (p2=14) | (p3=14) | (p4=14) | (p5=14) | (p6=14) | (p7=14) | (p8=14) | (p9=14) | (p10=14) ] |
|||
|
|||
// theorem 2 (liveness) |
|||
// if process 1 tries then eventually it enters the critical section |
|||
|
|||
(p1=1) => P>=1 [ true U (p1=10) ] |
|||
|
|||
// not probability 1 |
|||
|
|||
P<=0.5 [ (p2!=10 & p3!=10) U (p1=10) ] |
|||
@ -1,25 +0,0 @@ |
|||
// theorem 1 (mutual exclusion) |
|||
|
|||
!((p1>9) & (p2>9)) |
|||
& !((p1>9) & (p3>9)) |
|||
& !((p2>9) & (p3>9)) |
|||
|
|||
// lemma c |
|||
// if the crical section is occupied then eventually it becomes clear |
|||
|
|||
(p1>9) | (p2>9) | (p3>9) => P>=1 [ true U (p1<10) & (p2<10) & (p3<10) ] |
|||
|
|||
// lemma d |
|||
// if a process is between 4 and 13 (in our version) then eventually some process gets to 14 |
|||
|
|||
((p1>3) & (p1<14)) | ((p2>3) & (p2<14)) | ((p3>3) & (p3<14)) => P>=1 [ true U (p1=14) | (p2=14) | (p3=14) ] |
|||
|
|||
|
|||
// theorem 2 (liveness) |
|||
// if process 1 tries then eventually it enters the critical section |
|||
|
|||
(p1=1) => P>=1 [ true U (p1=10) ] |
|||
|
|||
// not probability 1 |
|||
|
|||
P<=0.5 [ (p2!=10 & p3!=10) U (p1=10) ] |
|||
@ -1,29 +0,0 @@ |
|||
// theorem 1 (mutual exclusion) |
|||
|
|||
(!((p1>9) & (p2>9))) & |
|||
(!((p1>9) & (p3>9))) & |
|||
(!((p1>9) & (p4>9))) & |
|||
(!((p2>9) & (p3>9))) & |
|||
(!((p2>9) & (p4>9))) & |
|||
(!((p3>9) & (p4>9))) |
|||
|
|||
// lemma c |
|||
// if the crical section is occupied then eventually it becomes clear |
|||
|
|||
(p1>9) | (p2>9) | (p3>9) | (p4>9) => |
|||
P>=1 [ true U (p1<10) & (p2<10) & (p3<10) & (p4<10) ] |
|||
|
|||
// lemma d |
|||
// if a process is between 4 and 13 (in our version) then eventually some process gets to 14 |
|||
|
|||
((p1>3) & (p1<14)) | ((p2>3) & (p2<14)) | ((p3>3) & (p3<14)) | ((p4>3) & (p4<14)) => |
|||
P>=1 [ true U (p1=14) | (p2=14) | (p3=14) | (p4=14) ] |
|||
|
|||
// theorem 2 (liveness) |
|||
// if process 1 tries then eventually it enters the critical section |
|||
|
|||
(p1=1) => P>=1 [ true U (p1=10) ] |
|||
|
|||
// not probability 1 |
|||
|
|||
P<=0.5 [ (p2!=10 & p3!=10) U (p1=10) ] |
|||
@ -1,33 +0,0 @@ |
|||
// theorem 1 (mutual exclusion) |
|||
|
|||
(!((p1>9) & (p2>9))) & |
|||
(!((p1>9) & (p3>9))) & |
|||
(!((p1>9) & (p4>9))) & |
|||
(!((p1>9) & (p5>9))) & |
|||
(!((p2>9) & (p3>9))) & |
|||
(!((p2>9) & (p4>9))) & |
|||
(!((p2>9) & (p5>9))) & |
|||
(!((p3>9) & (p4>9))) & |
|||
(!((p3>9) & (p5>9))) & |
|||
(!((p4>9) & (p5>9))) |
|||
|
|||
// lemma c |
|||
// if the crical section is occupied then eventually it becomes clear |
|||
|
|||
(p1>9) | (p2>9) | (p3>9) | (p4>9) | (p5>9) => |
|||
P>=1 [ true U (p1<10) & (p2<10) & (p3<10) & (p4<10) & (p5<10) ] |
|||
|
|||
// lemma d |
|||
// if a process is between 4 and 13 (in our version) then eventually some process gets to 14 |
|||
|
|||
((p1>3) & (p1<14)) | ((p2>3) & (p2<14)) | ((p3>3) & (p3<14)) | ((p4>3) & (p4<14)) | ((p5>3) & (p5<14)) => |
|||
P>=1 [ true U (p1=14) | (p2=14) | (p3=14) | (p4=14) | (p5=14) ] |
|||
|
|||
// theorem 2 (liveness) |
|||
// if process 1 tries then eventually it enters the critical section |
|||
|
|||
(p1=1) => P>=1 [ true U (p1=10) ] |
|||
|
|||
// not probability 1 |
|||
|
|||
P<=0.5 [ (p2!=10 & p3!=10) U (p1=10) ] |
|||
@ -1,51 +0,0 @@ |
|||
// theorem 1 (mutual exclusion) |
|||
|
|||
(!((p1>9) & (p2>9))) & |
|||
(!((p1>9) & (p3>9))) & |
|||
(!((p1>9) & (p4>9))) & |
|||
(!((p1>9) & (p5>9))) & |
|||
(!((p1>9) & (p6>9))) & |
|||
(!((p1>9) & (p7>9))) & |
|||
(!((p1>9) & (p8>9))) & |
|||
(!((p2>9) & (p3>9))) & |
|||
(!((p2>9) & (p4>9))) & |
|||
(!((p2>9) & (p5>9))) & |
|||
(!((p2>9) & (p6>9))) & |
|||
(!((p2>9) & (p7>9))) & |
|||
(!((p2>9) & (p8>9))) & |
|||
(!((p3>9) & (p4>9))) & |
|||
(!((p3>9) & (p5>9))) & |
|||
(!((p3>9) & (p6>9))) & |
|||
(!((p3>9) & (p7>9))) & |
|||
(!((p3>9) & (p8>9))) & |
|||
(!((p4>9) & (p5>9))) & |
|||
(!((p4>9) & (p6>9))) & |
|||
(!((p4>9) & (p7>9))) & |
|||
(!((p4>9) & (p8>9))) & |
|||
(!((p5>9) & (p6>9))) & |
|||
(!((p5>9) & (p7>9))) & |
|||
(!((p5>9) & (p8>9))) & |
|||
(!((p6>9) & (p7>9))) & |
|||
(!((p6>9) & (p8>9))) & |
|||
(!((p7>9) & (p8>9))) |
|||
|
|||
// lemma c |
|||
// if the crical section is occupied then eventually it becomes clear |
|||
|
|||
(p1>9) | (p2>9) | (p3>9) | (p4>9) | (p5>9) | (p6>9) | (p7>9) | (p8>9) => |
|||
P>=1 [ true U (p1<10) & (p2<10) & (p3<10) & (p4<10) & (p5<10) & (p6<10) & (p7<10) & (p8<10) ] |
|||
|
|||
// lemma d |
|||
// if a process is between 4 and 13 (in our version) then eventually some process gets to 14 |
|||
|
|||
((p1>3) & (p1<14)) | ((p2>3) & (p2<14)) | ((p3>3) & (p3<14)) | ((p4>3) & (p4<14)) | ((p5>3) & (p5<14)) | ((p6>3) & (p6<14)) | ((p7>3) & (p7<14)) | ((p8>3) & (p8<14)) => |
|||
P>=1 [ true U (p1=14) | (p2=14) | (p3=14) | (p4=14) | (p5=14) | (p6=14) | (p7=14) | (p8=14) ] |
|||
|
|||
// theorem 2 (liveness) |
|||
// if process 1 tries then eventually it enters the critical section |
|||
|
|||
(p1=1) => P>=1 [ true U (p1=10) ] |
|||
|
|||
// not probability 1 |
|||
|
|||
P<=0.5 [ (p2!=10 & p3!=10) U (p1=10) ] |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue