Go up to A Proving Assertions Go forward to A.2 The Invariant |
For the purpose of this subsection, we rewrite the method main
as
follows:
public void main() { int i; int state = 0; while (state != 8) { switch (state) { case 0: { if (number = 0) state = 1; else state = 3; } case 1: { out(0).send(new Msg(0)); state = 2; } case 2: { out(1).send(new Msg(0)) sent = true; state = 3; } case 3: { i = 0; state = 4; } case 4: { if (i < 5) state = 5; else state = 8; } case 5: { index = in().select(); state = 6; } case 6: { msg = in(index).receive(); state = 7; } case 7: { out(index).send(msg); msg = null; i = i+1; state = 4; } } } }
This program implements the same behavior as the original one presented in the
previous subsection by a sequence of state transitions such that the only
interaction with other nodes (send
, receive
, select
)
occurs as the first statement of some transition. A node program may be
interrupted only immediately before such a communication operation takes
place. Network execution can be therefore considered as an interleaving of
such transitions from the programs of different nodes.