An extension to the theory of confluence in the process calculus CCS is presented. The theory is generalized to an extension of the ~r-calc~flus. This calculus is used to provide semantics by translation for a parallel object-oriented programming language. The confluence theory is applied to prove the indistinguishability in an arbitrary program context of two class defilfitions which generate binary tree data structures one of which allows concurrent operations.
1
[ntroductionThe alms of this paper are to present an extension to the theory of confluence in process cMculus and to illustrate the new theory by applying it to a problem concerning concurrent operations on binary tree data structures expressed in a parMlel object-oriented programming language. In fact, the development of the theory was stimulated by the problem. We begin by describing it.Characteristic of the object-oriented style of programming is the description of a computational system as a collection of objects each of which is a self-contained entity possessing data (references to objects and simple values) and procedures (methods) for acting on those data.. A program of a parallel object-oriented language typically consists of a collection of class definitions, each of which provides a template for its object instances, together with an indication of how a computation should be initiated. Such a program often describes a highly mobile concurrent system in which new objects are created as computation proceeds and references to objects are passed in communications. Parallel object-oriented languages differ from one another in the w~vs in which they integrate parallelism with object-oriented features; see e.g. [1,8].In [4] a development method for concurrent programs is proposed. Central to it are the application of program transformations to control the introduction of concurrency into designs and the use of ideas from object-oriented programming to control *Supported by a grant from the U.K. Engineering and Physical Sciences Research Council 218 interference. The problem we consider concerns two classes taken, with minor modifications, from [4] whose instances may be used to construct binary tree-structured symbol tables. The first of these is as follows. An object of this class represents a node which stores in its variables K~V,L,R an integer key, a value (a reference to an object of some class A) and references to two instances of the class (its left and right children in the tree structure of which it is a component). It has two actions: the method Insert which allows a key-value pair to be inserted, and the method Search which returns the value associated with its key parameter (or nil if there is none). When the expression new(T) is evaluated a new instance of the class is created; the value of the expression is a reference to that object. When an object is created all its variables have nil values and it assumes a quiescent state in which any of its methods may be invoked. On completing a method invocation an object returns to...