mdp
const int deadline;
const int ky = deadline;
const int delay=1;
const double fast=0.5;
const double slow = 1-fast;
const int kx = 167;
module abstract_firewire
y : [0..ky+1];
x : [0..kx+1];
s : [0..11];
[] (s=0) & (x<delay) -> (x'=min(x+1,kx+1)) & (y'=min(y+1,ky+1));
[] (s=0) -> fast : (s'=1) + slow : (s'=4);
[] (s=0) -> fast : (s'=2) + slow : (s'=3);
[] (s=1) & (x<delay) -> (x'=min(x+1,kx+1)) & (y'=min(y+1,ky+1));
[] (s=1) -> fast : (s'=5) & (x'=0) + slow : (s'=6) & (x'=0);
[] (s=2) & (x<delay) -> (x'=min(x+1,kx+1)) & (y'=min(y+1,ky+1));
[] (s=2) -> fast : (s'=5) & (x'=0) + slow : (s'=7) & (x'=0);
[] (s=3) & (x<delay) -> (x'=min(x+1,kx+1)) & (y'=min(y+1,ky+1));
[] (s=3) -> fast : (s'=6) & (x'=0) + slow : (s'=8) & (x'=0);
[] (s=4) & (x<delay) -> (x'=min(x+1,kx+1)) & (y'=min(y+1,ky+1));
[] (s=4) -> fast : (s'=7) & (x'=0) + slow : (s'=8) & (x'=0);
[] (s=5) & (x<85) -> (x'=min(x+1,kx+1)) & (y'=min(y+1,ky+1));
[] (s=5) & (x>=76) -> (s'=0) & (x'=0);
[] (s=5) & (x>=76-delay) -> (s'=9) & (x'=0);
[] (s=6) & (x<167) -> (x'=min(x+1,kx+1)) & (y'=min(y+1,ky+1));
[] (s=6) & (x>=159-delay) -> (s'=9) & (x'=0);
[] (s=7) & (x<167) -> (x'=min(x+1,kx+1)) & (y'=min(y+1,ky+1));
[] (s=7) & (x>=159-delay) -> (s'=9) & (x'=0);
[] (s=8) & (x<167) -> (x'=min(x+1,kx+1)) & (y'=min(y+1,ky+1));
[] (s=8) & (x>=159) -> (s'=0) & (x'=0);
[] (s=8) & (x>=159-delay) -> (s'=9) & (x'=0);
[] (y<=deadline) & (s=9) -> (s'=10) & (y'=0);
[] (y>deadline) & (s=9) -> (s'=11) & (y'=0);
[] (s>=10) -> true;
endmodule