constant N := 3; direct variable t[N] < 2; puppet variable e[N] < 2; puppet variable ready[N] < 2; // Converge to a state where one process has the token and execute the // shadow protocol defined by the 'shadow action:' statements below. (future & shadow) (unique i < N : i == 0 && t[i-1] == t[i] // Bot has the token || i != 0 && t[i-1] != t[i] // P[i] has the token ); process Bot[i < 1] { // i==0 read: e[i-1], t[i-1]; write: e[i], t[i], ready[i]; // Enforce this behavior within the invariant: shadow action: ( t[i-1] == t[i] --> t[i] := 1 - t[i-1]; ); } process P[i <- map tid < N-1 : tid+1] { read: e[i-1], t[i-1]; write: e[i], t[i], ready[i]; // Enforce this behavior within the invariant: shadow action: ( t[i-1] != t[i] --> t[i] := t[i-1]; ); }