Browse Source
Tidy up and addition of .pp files to rabin.
Tidy up and addition of .pp files to rabin.
git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@381 bbc10eb1-c90d-0410-af57-cb519fbb1720master
17 changed files with 252 additions and 376 deletions
-
9prism-examples/rabin/.autopp
-
60prism-examples/rabin/.rabinN.nm.pp
-
8prism-examples/rabin/.rabinN.pctl.pp
-
49prism-examples/rabin/rabin10.nm
-
62prism-examples/rabin/rabin10.pctl
-
49prism-examples/rabin/rabin12.nm
-
83prism-examples/rabin/rabin12.pctl
-
29prism-examples/rabin/rabin3.nm
-
20prism-examples/rabin/rabin3.pctl
-
29prism-examples/rabin/rabin4.nm
-
23prism-examples/rabin/rabin4.pctl
-
31prism-examples/rabin/rabin5.nm
-
27prism-examples/rabin/rabin5.pctl
-
31prism-examples/rabin/rabin6.nm
-
32prism-examples/rabin/rabin6.pctl
-
41prism-examples/rabin/rabin8.nm
-
45prism-examples/rabin/rabin8.pctl
@ -0,0 +1,9 @@ |
|||
#!/bin/csh |
|||
|
|||
foreach N ( 3 4 5 6 8 10 12 ) |
|||
echo "Generating for N=$N" |
|||
prismpp .rabinN.nm.pp $N >! rabin$N.nm |
|||
unix2dos rabin$N.nm |
|||
prismpp .rabinN.pctl.pp $N >! rabin$N.pctl |
|||
unix2dos rabin$N.pctl |
|||
end |
|||
@ -0,0 +1,60 @@ |
|||
#const N# |
|||
#const K=4+func(ceil,func(log,N,2))# |
|||
// N-processor mutual exclusion [Rab82] |
|||
// with global variables to remove sychronization |
|||
// gxn/dxp 02/02/00 |
|||
|
|||
nondeterministic |
|||
|
|||
// size of shared counter |
|||
const int K = #K#; // 4+ceil(log_2 N) |
|||
|
|||
// global variables (all modules can read and write) |
|||
// c=0 critical section free |
|||
// c=1 critical section not free |
|||
// b current highest draw |
|||
// r current round |
|||
|
|||
global c : [0..1]; |
|||
global b : [0..K]; |
|||
global r : [1..2]; |
|||
|
|||
// local variables: process i |
|||
// state: pi |
|||
// 0 remainder |
|||
// 1 trying |
|||
// 2 critical section |
|||
// current draw: bi |
|||
// current round: ri |
|||
|
|||
// atomic formula for process 1 drawing |
|||
formula draw = p1=1 & (b<b1 | r!=r1); |
|||
|
|||
module process1 |
|||
|
|||
p1 : [0..2]; |
|||
b1 : [0..K]; |
|||
r1 : [0..2]; |
|||
|
|||
// remain in remainder |
|||
[] p1=0 -> (p1'=0); |
|||
// enter trying |
|||
[] p1=0 -> (p1'=1); |
|||
// make a draw |
|||
[] draw ->#+ i=1:K-1# #1/func(floor,func(pow,2,i))# : (b1'=#i#) & (r1'=r) & (b'=max(b,#i#)) |
|||
#end#+ #1/func(floor,func(pow,2,K-1))# : (b1'=#K#) & (r1'=r) & (b'=max(b,#K#)); |
|||
// enter critical section and randomly set r to 1 or 2 |
|||
[] p1=1 & b=b1 & r=r1 & c=0 -> 0.5 : (r'=1) & (c'=1) & (b'=0) & (b1'=0) & (r1'=0) & (p1'=2) |
|||
+ 0.5 : (r'=2) & (c'=1) & (b'=0) & (b1'=0) & (r1'=0) & (p1'=2); |
|||
// loop when trying and cannot make a draw or enter critical section |
|||
[] p1=1 & r1=r & b1<=b & ((c=0 & b1!=b) | c=1) -> (p1'=p1); |
|||
// leave crictical section |
|||
[] p1=2 -> (p1'=0) & (c'=0); |
|||
// stay in critical section |
|||
[] p1=2 -> (p1'=2); |
|||
|
|||
endmodule |
|||
|
|||
// construct further modules through renaming |
|||
#for i=2:N# |
|||
module process#i# = process1 [p1=p#i#, b1=b#i#, r1=r#i#] endmodule
#end# |
|||
@ -0,0 +1,8 @@ |
|||
#const N# |
|||
label "one_trying" = #| i=1:N#p#i#=1#end#;
label "one_critical" = #| i=1:N#p#i#=2#end#; |
|||
|
|||
// Mutual exclusion |
|||
#+ i=1:N#(p#i#=2?1:0)#end# <= 1 |
|||
|
|||
// Liveness: If a process is trying, then eventually a process enters the critical section |
|||
"one_trying" => P>=1 [ true U "one_critical" ] |
|||
@ -1,58 +1,8 @@ |
|||
// mutual exclusion |
|||
label "one_trying" = p1=1|p2=1|p3=1|p4=1|p5=1|p6=1|p7=1|p8=1|p9=1|p10=1; |
|||
label "one_critical" = p1=2|p2=2|p3=2|p4=2|p5=2|p6=2|p7=2|p8=2|p9=2|p10=2; |
|||
|
|||
(!((p1=2) & (p2=2))) & |
|||
(!((p1=2) & (p3=2))) & |
|||
(!((p1=2) & (p4=2))) & |
|||
(!((p1=2) & (p5=2))) & |
|||
(!((p1=2) & (p6=2))) & |
|||
(!((p1=2) & (p7=2))) & |
|||
(!((p1=2) & (p8=2))) & |
|||
(!((p1=2) & (p9=2))) & |
|||
(!((p1=2) & (p10=2))) & |
|||
(!((p2=2) & (p3=2))) & |
|||
(!((p2=2) & (p4=2))) & |
|||
(!((p2=2) & (p5=2))) & |
|||
(!((p2=2) & (p6=2))) & |
|||
(!((p2=2) & (p7=2))) & |
|||
(!((p2=2) & (p8=2))) & |
|||
(!((p2=2) & (p9=2))) & |
|||
(!((p2=2) & (p10=2))) & |
|||
(!((p3=2) & (p4=2))) & |
|||
(!((p3=2) & (p5=2))) & |
|||
(!((p3=2) & (p6=2))) & |
|||
(!((p3=2) & (p7=2))) & |
|||
(!((p3=2) & (p8=2))) & |
|||
(!((p3=2) & (p9=2))) & |
|||
(!((p3=2) & (p10=2))) & |
|||
(!((p4=2) & (p5=2))) & |
|||
(!((p4=2) & (p6=2))) & |
|||
(!((p4=2) & (p7=2))) & |
|||
(!((p4=2) & (p8=2))) & |
|||
(!((p4=2) & (p9=2))) & |
|||
(!((p4=2) & (p10=2))) & |
|||
(!((p5=2) & (p6=2))) & |
|||
(!((p5=2) & (p7=2))) & |
|||
(!((p5=2) & (p8=2))) & |
|||
(!((p5=2) & (p9=2))) & |
|||
(!((p5=2) & (p10=2))) & |
|||
(!((p6=2) & (p7=2))) & |
|||
(!((p6=2) & (p8=2))) & |
|||
(!((p6=2) & (p9=2))) & |
|||
(!((p6=2) & (p10=2))) & |
|||
(!((p7=2) & (p8=2))) & |
|||
(!((p7=2) & (p9=2))) & |
|||
(!((p7=2) & (p10=2))) & |
|||
(!((p8=2) & (p9=2))) & |
|||
(!((p8=2) & (p10=2))) & |
|||
(!((p9=2) & (p10=2))) |
|||
// Mutual exclusion |
|||
(p1=2?1:0)+(p2=2?1:0)+(p3=2?1:0)+(p4=2?1:0)+(p5=2?1:0)+(p6=2?1:0)+(p7=2?1:0)+(p8=2?1:0)+(p9=2?1:0)+(p10=2?1:0) <= 1 |
|||
|
|||
// liveness |
|||
// if a process is trying then eventually a process enters the critical section |
|||
|
|||
((p1=1) | (p2=1) | (p3=1) | (p4=1) | (p5=1) | (p6=1) | (p7=1) | (p8=1) | (p9=1) | (p10=1)) => |
|||
P>=1 [ true U (p1=2) | (p2=2) | (p3=2) | (p4=2) | (p5=2) | (p6=2) | (p7=2) | (p8=2) | (p9=2) | (p10=2) ] |
|||
|
|||
// if all processes are trying process 1 enters the critical section first |
|||
|
|||
(p1=1) & (p2=1) & (p3=1) & (p4=1) & (p5=1) & (p6=1) & (p7=1) & (p8=1) & (p9=1) & (p10=1) => |
|||
P>=0.5 [ !(p2=2) & !(p3=2) & !(p4=2) & !(p5=2) & !(p6=2) & !(p7=2) & !(p8=2) & !(p9=2) & !(p10=2) U (p1=2) ] |
|||
// Liveness: If a process is trying, then eventually a process enters the critical section |
|||
"one_trying" => P>=1 [ true U "one_critical" ] |
|||
@ -1,79 +1,8 @@ |
|||
// mutual exclusion |
|||
label "one_trying" = p1=1|p2=1|p3=1|p4=1|p5=1|p6=1|p7=1|p8=1|p9=1|p10=1|p11=1|p12=1; |
|||
label "one_critical" = p1=2|p2=2|p3=2|p4=2|p5=2|p6=2|p7=2|p8=2|p9=2|p10=2|p11=2|p12=2; |
|||
|
|||
(!((p1=2) & (p2=2))) & |
|||
(!((p1=2) & (p3=2))) & |
|||
(!((p1=2) & (p4=2))) & |
|||
(!((p1=2) & (p5=2))) & |
|||
(!((p1=2) & (p6=2))) & |
|||
(!((p1=2) & (p7=2))) & |
|||
(!((p1=2) & (p8=2))) & |
|||
(!((p1=2) & (p9=2))) & |
|||
(!((p1=2) & (p10=2))) & |
|||
(!((p1=2) & (p11=2))) & |
|||
(!((p1=2) & (p12=2))) & |
|||
(!((p2=2) & (p3=2))) & |
|||
(!((p2=2) & (p4=2))) & |
|||
(!((p2=2) & (p5=2))) & |
|||
(!((p2=2) & (p6=2))) & |
|||
(!((p2=2) & (p7=2))) & |
|||
(!((p2=2) & (p8=2))) & |
|||
(!((p2=2) & (p9=2))) & |
|||
(!((p2=2) & (p10=2))) & |
|||
(!((p2=2) & (p11=2))) & |
|||
(!((p2=2) & (p12=2))) & |
|||
(!((p3=2) & (p4=2))) & |
|||
(!((p3=2) & (p5=2))) & |
|||
(!((p3=2) & (p6=2))) & |
|||
(!((p3=2) & (p7=2))) & |
|||
(!((p3=2) & (p8=2))) & |
|||
(!((p3=2) & (p9=2))) & |
|||
(!((p3=2) & (p10=2))) & |
|||
(!((p3=2) & (p11=2))) & |
|||
(!((p3=2) & (p12=2))) & |
|||
(!((p4=2) & (p5=2))) & |
|||
(!((p4=2) & (p6=2))) & |
|||
(!((p4=2) & (p7=2))) & |
|||
(!((p4=2) & (p8=2))) & |
|||
(!((p4=2) & (p9=2))) & |
|||
(!((p4=2) & (p10=2))) & |
|||
(!((p4=2) & (p11=2))) & |
|||
(!((p4=2) & (p12=2))) & |
|||
(!((p5=2) & (p6=2))) & |
|||
(!((p5=2) & (p7=2))) & |
|||
(!((p5=2) & (p8=2))) & |
|||
(!((p5=2) & (p9=2))) & |
|||
(!((p5=2) & (p10=2))) & |
|||
(!((p5=2) & (p11=2))) & |
|||
(!((p5=2) & (p12=2))) & |
|||
(!((p6=2) & (p7=2))) & |
|||
(!((p6=2) & (p8=2))) & |
|||
(!((p6=2) & (p9=2))) & |
|||
(!((p6=2) & (p10=2))) & |
|||
(!((p6=2) & (p11=2))) & |
|||
(!((p6=2) & (p12=2))) & |
|||
(!((p7=2) & (p8=2))) & |
|||
(!((p7=2) & (p9=2))) & |
|||
(!((p7=2) & (p10=2))) & |
|||
(!((p7=2) & (p11=2))) & |
|||
(!((p7=2) & (p12=2))) & |
|||
(!((p8=2) & (p9=2))) & |
|||
(!((p8=2) & (p10=2))) & |
|||
(!((p8=2) & (p11=2))) & |
|||
(!((p8=2) & (p12=2))) & |
|||
(!((p9=2) & (p10=2))) & |
|||
(!((p9=2) & (p11=2))) & |
|||
(!((p9=2) & (p12=2))) & |
|||
(!((p10=2) & (p11=2))) & |
|||
(!((p10=2) & (p12=2))) & |
|||
(!((p11=2) & (p12=2))) |
|||
// Mutual exclusion |
|||
(p1=2?1:0)+(p2=2?1:0)+(p3=2?1:0)+(p4=2?1:0)+(p5=2?1:0)+(p6=2?1:0)+(p7=2?1:0)+(p8=2?1:0)+(p9=2?1:0)+(p10=2?1:0)+(p11=2?1:0)+(p12=2?1:0) <= 1 |
|||
|
|||
// liveness |
|||
// if a process is trying then eventually a process enters the critical section |
|||
|
|||
((p1=1) | (p2=1) | (p3=1) | (p4=1) | (p5=1) | (p6=1) | (p7=1) | (p8=1) | (p9=1) | (p10=1) | (p11=1) | (p12=1)) => |
|||
P>=1 [ true U (p1=2) | (p2=2) | (p3=2) | (p4=2) | (p5=2) | (p6=2) | (p7=2) | (p8=2) | (p9=2) | (p10=2) | (p11=2) | (p12=2) ] |
|||
|
|||
// if all processes are trying process 1 enters the critical section first |
|||
|
|||
(p1=1) & (p2=1) & (p3=1) & (p4=1) & (p5=1) & (p6=1) & (p7=1) & (p8=1) & (p9=1) & (p10=1) & (p11=1) & (p12=1) => |
|||
P>=0.5 [ !(p2=2) & !(p3=2) & !(p4=2) & !(p5=2) & !(p6=2) & !(p7=2) & !(p8=2) & !(p9=2) & !(p10=2) & !(p11=2) & !(p12=2) U (p1=2) ] |
|||
// Liveness: If a process is trying, then eventually a process enters the critical section |
|||
"one_trying" => P>=1 [ true U "one_critical" ] |
|||
@ -1,16 +1,8 @@ |
|||
// mutual exclusion |
|||
label "one_trying" = p1=1|p2=1|p3=1; |
|||
label "one_critical" = p1=2|p2=2|p3=2; |
|||
|
|||
(!((p1=2) & (p2=2))) & |
|||
(!((p1=2) & (p3=2))) & |
|||
(!((p2=2) & (p3=2))) |
|||
// Mutual exclusion |
|||
(p1=2?1:0)+(p2=2?1:0)+(p3=2?1:0) <= 1 |
|||
|
|||
// liveness |
|||
// if a process is trying then eventually a process enters the critical section |
|||
|
|||
((p1=1) | (p2=1) | (p3=1)) => |
|||
P>=1 [ true U (p1=2) | (p2=2) | (p3=2) ] |
|||
|
|||
// if all processes are trying process 1 enters the critical section first |
|||
|
|||
(p1=1) & (p2=1) & (p3=1) => |
|||
P>=0.5 [ !(p2=2) & !(p3=2) U (p1=2) ] |
|||
// Liveness: If a process is trying, then eventually a process enters the critical section |
|||
"one_trying" => P>=1 [ true U "one_critical" ] |
|||
@ -1,19 +1,8 @@ |
|||
// mutual exclusion |
|||
label "one_trying" = p1=1|p2=1|p3=1|p4=1; |
|||
label "one_critical" = p1=2|p2=2|p3=2|p4=2; |
|||
|
|||
(!((p1=2) & (p2=2))) & |
|||
(!((p1=2) & (p3=2))) & |
|||
(!((p1=2) & (p4=2))) & |
|||
(!((p2=2) & (p3=2))) & |
|||
(!((p2=2) & (p4=2))) & |
|||
(!((p3=2) & (p4=2))) |
|||
// Mutual exclusion |
|||
(p1=2?1:0)+(p2=2?1:0)+(p3=2?1:0)+(p4=2?1:0) <= 1 |
|||
|
|||
// liveness |
|||
// if a process is trying then eventually a process enters the critical section |
|||
|
|||
((p1=1) | (p2=1) | (p3=1) | (p4=1)) => |
|||
P>=1 [ true U (p1=2) | (p2=2) | (p3=2) | (p4=2) ] |
|||
|
|||
// if all processes are trying process 1 enters the critical section first |
|||
|
|||
(p1=1) & (p2=1) & (p3=1) & (p4=1) => |
|||
P>=0.5 [ !(p2=2) & !(p3=2) & !(p4=2) U (p1=2) ] |
|||
// Liveness: If a process is trying, then eventually a process enters the critical section |
|||
"one_trying" => P>=1 [ true U "one_critical" ] |
|||
@ -1,23 +1,8 @@ |
|||
// mutual exclusion |
|||
label "one_trying" = p1=1|p2=1|p3=1|p4=1|p5=1; |
|||
label "one_critical" = p1=2|p2=2|p3=2|p4=2|p5=2; |
|||
|
|||
(!((p1=2) & (p2=2))) & |
|||
(!((p1=2) & (p3=2))) & |
|||
(!((p1=2) & (p4=2))) & |
|||
(!((p1=2) & (p5=2))) & |
|||
(!((p2=2) & (p3=2))) & |
|||
(!((p2=2) & (p4=2))) & |
|||
(!((p2=2) & (p5=2))) & |
|||
(!((p3=2) & (p4=2))) & |
|||
(!((p3=2) & (p5=2))) & |
|||
(!((p4=2) & (p5=2))) |
|||
// Mutual exclusion |
|||
(p1=2?1:0)+(p2=2?1:0)+(p3=2?1:0)+(p4=2?1:0)+(p5=2?1:0) <= 1 |
|||
|
|||
// liveness |
|||
// if a process is trying then eventually a process enters the critical section |
|||
|
|||
((p1=1) | (p2=1) | (p3=1) | (p4=1) | (p5=1)) => |
|||
P>=1 [ true U (p1=2) | (p2=2) | (p3=2) | (p4=2) | (p5=2) ] |
|||
|
|||
// if all processes are trying process 1 enters the critical section first |
|||
|
|||
(p1=1) & (p2=1) & (p3=1) & (p4=1) & (p5=1) => |
|||
P>=0.5 [ !(p2=2) & !(p3=2) & !(p4=2) & !(p5=2) U (p1=2) ] |
|||
// Liveness: If a process is trying, then eventually a process enters the critical section |
|||
"one_trying" => P>=1 [ true U "one_critical" ] |
|||
@ -1,28 +1,8 @@ |
|||
// mutual exclusion |
|||
label "one_trying" = p1=1|p2=1|p3=1|p4=1|p5=1|p6=1; |
|||
label "one_critical" = p1=2|p2=2|p3=2|p4=2|p5=2|p6=2; |
|||
|
|||
(!((p1=2) & (p2=2))) & |
|||
(!((p1=2) & (p3=2))) & |
|||
(!((p1=2) & (p4=2))) & |
|||
(!((p1=2) & (p5=2))) & |
|||
(!((p1=2) & (p6=2))) & |
|||
(!((p2=2) & (p3=2))) & |
|||
(!((p2=2) & (p4=2))) & |
|||
(!((p2=2) & (p5=2))) & |
|||
(!((p2=2) & (p6=2))) & |
|||
(!((p3=2) & (p4=2))) & |
|||
(!((p3=2) & (p5=2))) & |
|||
(!((p3=2) & (p6=2))) & |
|||
(!((p4=2) & (p5=2))) & |
|||
(!((p4=2) & (p6=2))) & |
|||
(!((p5=2) & (p6=2))) |
|||
// Mutual exclusion |
|||
(p1=2?1:0)+(p2=2?1:0)+(p3=2?1:0)+(p4=2?1:0)+(p5=2?1:0)+(p6=2?1:0) <= 1 |
|||
|
|||
// liveness |
|||
// if a process is trying then eventually a process enters the critical section |
|||
|
|||
((p1=1) | (p2=1) | (p3=1) | (p4=1) | (p5=1) | (p6=1)) => |
|||
P>=1 [ true U (p1=2) | (p2=2) | (p3=2) | (p4=2) | (p5=2) | (p6=2) ] |
|||
|
|||
// if all processes are trying process 1 enters the critical section first |
|||
|
|||
(p1=1) & (p2=1) & (p3=1) & (p4=1) & (p5=1) & (p6=1) => |
|||
P>=0.5 [ !(p2=2) & !(p3=2) & !(p4=2) & !(p5=2) & !(p6=2) U (p1=2) ] |
|||
// Liveness: If a process is trying, then eventually a process enters the critical section |
|||
"one_trying" => P>=1 [ true U "one_critical" ] |
|||
@ -1,41 +1,8 @@ |
|||
// mutual exclusion |
|||
label "one_trying" = p1=1|p2=1|p3=1|p4=1|p5=1|p6=1|p7=1|p8=1; |
|||
label "one_critical" = p1=2|p2=2|p3=2|p4=2|p5=2|p6=2|p7=2|p8=2; |
|||
|
|||
(!((p1=2) & (p2=2))) & |
|||
(!((p1=2) & (p3=2))) & |
|||
(!((p1=2) & (p4=2))) & |
|||
(!((p1=2) & (p5=2))) & |
|||
(!((p1=2) & (p6=2))) & |
|||
(!((p1=2) & (p7=2))) & |
|||
(!((p1=2) & (p8=2))) & |
|||
(!((p2=2) & (p3=2))) & |
|||
(!((p2=2) & (p4=2))) & |
|||
(!((p2=2) & (p5=2))) & |
|||
(!((p2=2) & (p6=2))) & |
|||
(!((p2=2) & (p7=2))) & |
|||
(!((p2=2) & (p8=2))) & |
|||
(!((p3=2) & (p4=2))) & |
|||
(!((p3=2) & (p5=2))) & |
|||
(!((p3=2) & (p6=2))) & |
|||
(!((p3=2) & (p7=2))) & |
|||
(!((p3=2) & (p8=2))) & |
|||
(!((p4=2) & (p5=2))) & |
|||
(!((p4=2) & (p6=2))) & |
|||
(!((p4=2) & (p7=2))) & |
|||
(!((p4=2) & (p8=2))) & |
|||
(!((p5=2) & (p6=2))) & |
|||
(!((p5=2) & (p7=2))) & |
|||
(!((p5=2) & (p8=2))) & |
|||
(!((p6=2) & (p7=2))) & |
|||
(!((p6=2) & (p8=2))) & |
|||
(!((p7=2) & (p8=2))) |
|||
// Mutual exclusion |
|||
(p1=2?1:0)+(p2=2?1:0)+(p3=2?1:0)+(p4=2?1:0)+(p5=2?1:0)+(p6=2?1:0)+(p7=2?1:0)+(p8=2?1:0) <= 1 |
|||
|
|||
// liveness |
|||
// if a process is trying then eventually a process enters the critical section |
|||
|
|||
((p1=1) | (p2=1) | (p3=1) | (p4=1) | (p5=1) | (p6=1) | (p7=1) | (p8=1)) => |
|||
P>=1 [ true U (p1=2) | (p2=2) | (p3=2) | (p4=2) | (p5=2) | (p6=2) | (p7=2) | (p8=2) ] |
|||
|
|||
// if all processes are trying process 1 enters the critical section first |
|||
|
|||
(p1=1) & (p2=1) & (p3=1) & (p4=1) & (p5=1) & (p6=1) & (p7=1) & (p8=1) => |
|||
P>=0.5 [ !(p2=2) & !(p3=2) & !(p4=2) & !(p5=2) & !(p6=2) & !(p7=2) & !(p8=2) U (p1=2) ] |
|||
// Liveness: If a process is trying, then eventually a process enters the critical section |
|||
"one_trying" => P>=1 [ true U "one_critical" ] |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue