pomdp
observables
last, r, mess, ack, o
endobservables
const K;
module originator
o : [0..4];
N : [0..K];
ack : [0..K];
[req] o=0 & K=1 -> 1/K : (o'=1) & (N'=1);
[req] o=0 & K=2 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2);
[req] o=0 & K=3 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3);
[req] o=0 & K=4 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4);
[req] o=0 & K=5 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5);
[req] o=0 & K=6 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6);
[req] o=0 & K=7 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7);
[req] o=0 & K=8 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8);
[req] o=0 & K=9 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8)
+ 1/K : (o'=1) & (N'=9);
[req] o=0 & K=10 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8)
+ 1/K : (o'=1) & (N'=9)
+ 1/K : (o'=1) & (N'=10);
[req] o=0 & K=11 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8)
+ 1/K : (o'=1) & (N'=9)
+ 1/K : (o'=1) & (N'=10)
+ 1/K : (o'=1) & (N'=11);
[req] o=0 & K=12 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8)
+ 1/K : (o'=1) & (N'=9)
+ 1/K : (o'=1) & (N'=10)
+ 1/K : (o'=1) & (N'=11)
+ 1/K : (o'=1) & (N'=12);
[req] o=0 & K=13 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8)
+ 1/K : (o'=1) & (N'=9)
+ 1/K : (o'=1) & (N'=10)
+ 1/K : (o'=1) & (N'=11)
+ 1/K : (o'=1) & (N'=12)
+ 1/K : (o'=1) & (N'=13);
[req] o=0 & K=14 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8)
+ 1/K : (o'=1) & (N'=9)
+ 1/K : (o'=1) & (N'=10)
+ 1/K : (o'=1) & (N'=11)
+ 1/K : (o'=1) & (N'=12)
+ 1/K : (o'=1) & (N'=13)
+ 1/K : (o'=1) & (N'=14);
[req] o=0 & K=15 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8)
+ 1/K : (o'=1) & (N'=9)
+ 1/K : (o'=1) & (N'=10)
+ 1/K : (o'=1) & (N'=11)
+ 1/K : (o'=1) & (N'=12)
+ 1/K : (o'=1) & (N'=13)
+ 1/K : (o'=1) & (N'=14)
+ 1/K : (o'=1) & (N'=15);
[req] o=0 & K=16 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8)
+ 1/K : (o'=1) & (N'=9)
+ 1/K : (o'=1) & (N'=10)
+ 1/K : (o'=1) & (N'=11)
+ 1/K : (o'=1) & (N'=12)
+ 1/K : (o'=1) & (N'=13)
+ 1/K : (o'=1) & (N'=14)
+ 1/K : (o'=1) & (N'=15)
+ 1/K : (o'=1) & (N'=16);
[req] o=0 & K=17 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8)
+ 1/K : (o'=1) & (N'=9)
+ 1/K : (o'=1) & (N'=10)
+ 1/K : (o'=1) & (N'=11)
+ 1/K : (o'=1) & (N'=12)
+ 1/K : (o'=1) & (N'=13)
+ 1/K : (o'=1) & (N'=14)
+ 1/K : (o'=1) & (N'=15)
+ 1/K : (o'=1) & (N'=16)
+ 1/K : (o'=1) & (N'=17);
[req] o=0 & K=18 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8)
+ 1/K : (o'=1) & (N'=9)
+ 1/K : (o'=1) & (N'=10)
+ 1/K : (o'=1) & (N'=11)
+ 1/K : (o'=1) & (N'=12)
+ 1/K : (o'=1) & (N'=13)
+ 1/K : (o'=1) & (N'=14)
+ 1/K : (o'=1) & (N'=15)
+ 1/K : (o'=1) & (N'=16)
+ 1/K : (o'=1) & (N'=17)
+ 1/K : (o'=1) & (N'=18);
[req] o=0 & K=19 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8)
+ 1/K : (o'=1) & (N'=9)
+ 1/K : (o'=1) & (N'=10)
+ 1/K : (o'=1) & (N'=11)
+ 1/K : (o'=1) & (N'=12)
+ 1/K : (o'=1) & (N'=13)
+ 1/K : (o'=1) & (N'=14)
+ 1/K : (o'=1) & (N'=15)
+ 1/K : (o'=1) & (N'=16)
+ 1/K : (o'=1) & (N'=17)
+ 1/K : (o'=1) & (N'=18)
+ 1/K : (o'=1) & (N'=19);
[req] o=0 & K=20 -> 1/K : (o'=1) & (N'=1)
+ 1/K : (o'=1) & (N'=2)
+ 1/K : (o'=1) & (N'=3)
+ 1/K : (o'=1) & (N'=4)
+ 1/K : (o'=1) & (N'=5)
+ 1/K : (o'=1) & (N'=6)
+ 1/K : (o'=1) & (N'=7)
+ 1/K : (o'=1) & (N'=8)
+ 1/K : (o'=1) & (N'=9)
+ 1/K : (o'=1) & (N'=10)
+ 1/K : (o'=1) & (N'=11)
+ 1/K : (o'=1) & (N'=12)
+ 1/K : (o'=1) & (N'=13)
+ 1/K : (o'=1) & (N'=14)
+ 1/K : (o'=1) & (N'=15)
+ 1/K : (o'=1) & (N'=16)
+ 1/K : (o'=1) & (N'=17)
+ 1/K : (o'=1) & (N'=18)
+ 1/K : (o'=1) & (N'=19)
+ 1/K : (o'=1) & (N'=20);
[message] o=1 -> (o'=2);
[ack] o=2 & ack<N-1 -> (o'=1) & (ack'=min(ack+1,K));
[ack] o=2 & ack=N-1 -> (o'=3) & (ack'=min(ack+1,K));
[done] o=3 -> (o'=3);
endmodule
module malicious_recipient
r : [0..3];
mess : [0..K];
last : [0..1];
[req] r=0 -> (r'=1);
[message] r=1 -> (r'=2) & (mess'=min(mess+1,K));
[ack] r=2 -> (r'=1);
[done] true -> true;
[stop] r=2 -> (r'=3);
[] r=3 & mess=N & ack<N -> (r'=3) & (last'=1);
[] r=3 & !(mess=N & ack<N) -> (r'=3);
endmodule
label "unfair" = last=1;