pomdp
const int K;
observables
o, k
endobservables
module grid
x : [0..2];
y : [0..2];
o : [0..2];
[] o=0 -> 1/15 : (o'=1) & (x'=0) & (y'=0)
+ 1/15 : (o'=1) & (x'=0) & (y'=1)
+ 1/15 : (o'=1) & (x'=0) & (y'=2)
+ 1/15 : (o'=1) & (x'=0) & (y'=3)
+ 1/15 : (o'=1) & (x'=1) & (y'=0)
+ 1/15 : (o'=1) & (x'=1) & (y'=1)
+ 1/15 : (o'=1) & (x'=1) & (y'=2)
+ 1/15 : (o'=1) & (x'=1) & (y'=3)
+ 1/15 : (o'=1) & (x'=2) & (y'=0)
+ 1/15 : (o'=1) & (x'=2) & (y'=1)
+ 1/15 : (o'=1) & (x'=2) & (y'=2)
+ 1/15 : (o'=1) & (x'=2) & (y'=3)
+ 1/15 : (o'=1) & (x'=3) & (y'=1)
+ 1/15 : (o'=1) & (x'=3) & (y'=2)
+ 1/15 : (o'=1) & (x'=3) & (y'=3);
[east] o=1 & !(x=2 & y=0) -> (x'=min(x+1,3));
[east] o=1 & x=2 & y=0 -> (x'=min(x+1,3)) & (o'=2);
[west] o=1 -> (x'=max(x-1,0));
[north] o=1 -> (x'=min(y+1,3));
[south] o=1 & !(x=3 & y=1) -> (y'=max(y-1,0));
[south] o=1 & x=3 & y=1 -> (y'=max(y-1,0)) & (o'=2);
[done] o=2 -> true;
endmodule
module bound
k : [0..K];
[east] k<K -> (k'=k+1);
[west] k<K -> (k'=k+1);
[north] k<K -> (k'=k+1);
[south] k<K -> (k'=k+1);
[] k=K -> true;
endmodule