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

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;