mdp
global counter : [ 0 .. 48 ] init 24 ;
formula no_5 = (8-(no_0+no_1+no_2+no_3+no_4));
module generic_process
no_0 : [0..8] init 8;
no_1 : [0..8] init 0;
no_2 : [0..8] init 0;
no_3 : [0..8] init 0;
no_4 : [0..8] init 0;
[] (no_0>0) -> 0.5:(no_0'=no_0-1)&(no_1'=no_1+1) + 0.5:(no_0'=no_0-1)&(no_2'=no_2+1);
[] (no_1>0) -> (counter'=counter-1)&(no_1'=no_1-1)&(no_3'=no_3+1);
[] (no_2>0) & (counter<48) -> (counter'=counter+1)&(no_2'=no_2-1)&(no_3'=no_3+1);
[] (no_3>0) & (counter<=8) -> (no_3'=no_3-1)&(no_4'=no_4+1);
[] (no_3>0) & (counter>=40) -> (no_3'=no_3-1);
[] (no_3>0) & ((counter>8)&(counter<40)) -> (no_3'=no_3-1)&(no_0'=no_0+1);
[] (no_4>0) -> true;
[] (no_5>0) -> true;
endmodule