From distributed algorithms to OCCAM programs by successive refinements
Abstract A distributed parallel algorithm is viewed as a collection of message-driven entities that communicate via channels of infinite (unbounded) capacity. Translating such an algorithm into an OCCAM program in such a way that the algorithm's correctness and liveness properties are preserved can be a complex problem, especially in view of the zero-capacity channels offered by the language. We describe a methodology and software environment for performing this property-preserving translation automatically, by use of information provided by the programmer on the algorithm's processing and communication loads and message-buffering requirements. Our proposal is centered around a succession of refinements whereby an initial OCCAM program, written as if channels had infinite capacity, is transformed into an OCCAM program that can be readily executed. The program is modified to accommodate appropriate message buffering and reflect an efficient allocation of tasks to processors. The environment includes software for relatively complex communication operations, as store-and-forward and circuit-switched point-to-point message delivery, and various group communication functions.