Development methods for (sequential) programs that run in isolation have been studied elsewhere. Programs that run in parallel can interfere with each other, either via shared storage or by sending messages. Extensions to earlier development methods are proposed for the rigorous development of interfering programs. In particular, extensions to the… (More)
Well understood methods exist for developing programs from formal specifications. Not only do such methods offer a precise check that certain sorts of deviations from their specifications are absent from implementations but they can also increase the productivity of the development process by careful use of layers of abstraction and refinement in design.… (More)
Companion papers give examples of the development of concurrent programs using a design notation which employs a number of concepts from object-oriented programming languages. This paper documents the semantics of the design language by providing a mapping to the pi-calculus.
This paper traces the important steps in the history –up to around 1990– of research on reasoning about programs. The main focus is on sequential imperative programs but some comments are made on concur-rency. Initially, researchers focussed on ways of verifying that a program satisfies its specification (or that two programs were equivalent). Over time it… (More)
Various forms of rely/guarantee conditions have been used to record and reason about interference in ways that provide compositional development methods for concurrent programs. This paper illustrates such a set of rules and proves their soundness. The underlying concurrent language allows fine-grained interleaving and nested concurrency; it is defined by… (More)