You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.0 KiB
79 lines
2.0 KiB
pta
|
|
|
|
module sender
|
|
sender : [0..12] init 0;
|
|
// 0 - reconf
|
|
// 1 used0
|
|
// 2 used1
|
|
// 3 used2
|
|
// 4 used3
|
|
// 5 used_wait
|
|
// 6 used_use
|
|
// 7 fresh0
|
|
// 8 fresh1
|
|
// 9 fresh2
|
|
// 10 fresh3
|
|
// 11 fresh_wait
|
|
// 12 fresh_use
|
|
|
|
x : clock;
|
|
|
|
invariant
|
|
(sender=0 => x<=0) &
|
|
(sender>=1 & sender<=10 => x<=20) &
|
|
(sender>10 => true)
|
|
endinvariant
|
|
|
|
// reconfiguring
|
|
[] sender=0 ->0.5 : (sender'=1) + 0.5 : (sender'=7);
|
|
[recv] sender=1 -> (sender'=0) & (x'=0);
|
|
[recv] sender=2 -> (sender'=0) & (x'=0);
|
|
[recv] sender=3 -> (sender'=0) & (x'=0);
|
|
[recv] sender=4 -> (sender'=0) & (x'=0);
|
|
[recv] sender=5 -> (sender'=0) & (x'=0);
|
|
[recv] sender=7 -> (sender'=0) & (x'=0);
|
|
[recv] sender=8 -> (sender'=0) & (x'=0);
|
|
[recv] sender=9 -> (sender'=0) & (x'=0);
|
|
[recv] sender=10 -> (sender'=0) & (x'=0);
|
|
[recv] sender=11 -> (sender'=0) & (x'=0);
|
|
|
|
// sending fresh
|
|
[send_used] sender=1 & x>=20 -> (sender'=2) & (x'=0);
|
|
[send_used] sender=2 & x>=20 -> (sender'=3) & (x'=0);
|
|
[send_used] sender=3 & x>=20 -> (sender'=4) & (x'=0);
|
|
[send_used] sender=4 & x>=20 -> (sender'=5) & (x'=0);
|
|
// sending used
|
|
[send_fresh] sender=7 & x>=20 -> (sender'=8) & (x'=0);
|
|
[send_fresh] sender=8 & x>=20 -> (sender'=9) & (x'=0);
|
|
[send_fresh] sender=9 & x>=20 -> (sender'=10) & (x'=0);
|
|
[send_fresh] sender=10 & x>=20 -> (sender'=11) & (x'=0);
|
|
|
|
// finished
|
|
[] sender=5 & x>=20 -> (sender'=6) & (x'=0);
|
|
[] sender=11 & x>=20 -> (sender'=12) & (x'=0);
|
|
[] sender=6 -> (sender'=6);
|
|
[] sender=12 -> (sender'=12);
|
|
|
|
endmodule
|
|
|
|
module environment
|
|
|
|
env : [0..2] init 0;
|
|
// 0,1,2 - ready,send,reply
|
|
|
|
y : clock;
|
|
|
|
invariant
|
|
(env=0 => true) &
|
|
(env>=1 => y<=5)
|
|
endinvariant
|
|
|
|
[send_fresh] env=0 -> true;
|
|
[send_used] env=0 -> 0.1 : (env'=0) & (y'=0) + 0.9 : (env'=1) & (y'=0);
|
|
[] env=1 & y>=1 -> 0.1 : (env'=0) & (y'=0) + 0.9 : (env'=2) & (y'=0);
|
|
[recv] env=2 & y>=1 -> (env'=0) & (y'=0);
|
|
|
|
endmodule
|
|
|
|
label "incorrect" = sender=6;
|
|
|