1. function receive(message msg)

2. when receive an initialization i-message with t = 0

3. tl = 0

4. foreach d in D

5. send (“i”, t, Ø) to md

6. when receive a collect @-message with t = tn

7. tl = t

8. foreach m in IMM

9. send (“@”, t, Ø) to the child m

10. when receive an internal *-message with tl <= t <= tn

11. post (xb)

12. while (IMM È INF ≠ Ø)

13. foreach m in IMM È INF

14. send (“*”, t, Ø) to the child m

15. send (“y”, t, yb) to the parent

16. tl = t

17. tn = Minimum {md.tn|md Î {Md}

18. if (tn < msg.value)

19. t = tn

20. foreach m in IMM

21. send (“@”, t, Ø) to the child m

22. else if tn < t < tl return causality error

23. end receive