be defined both as sequential processes, and as the parallel composition of more primitive processes. The relationships between different processes, and the way each process communicates with its environment, are described using various process algebraic operators. Using this algebraic approach, quite complex process descriptions can be easily constructed from a few primitive elements. Primitives CSP provides two classes of primitives in its process algebra: Events Events represent communications or interactions. They are assumed to be indivisible and instantaneous. They may be atomic names (e.g. on, off), compound names (e.g. valve.open, valve.close), or input/output events (e.g. mouse?xy, screen!bitmap). Primitive processes Primitive processes represent fundamental behaviors: examples include STOP (the process that communicates nothing, also called deadlock), and SKIP (which represents successful termination). Algebraic operators CSP has a wide range of algebraic operators. The principal ones are: Prefix The prefix operator combines an event and a process to produce a new process. For example, is the process that is willing to communicate with its environment and, after , behaves like the process . Deterministic choice The deterministic (or external) choice operator allows the future evolution of a process to be defined as a choice between two component processes and allows the environment to resolve the choice by communicating an initial event for one of the processes. For example, is the process that is willing to communicate the initial events and and subsequently behaves as either or , depending on which initial event the environment chooses to communicate. If both and were communicated simultaneously, the choice would be resolved nondeterministically. Nondeterministic choice The nondeterministic (or internal) choice operator allows the future evolution of a process to be defined as a choice between two component processes, but does not allow the environment any control over which one of the component processes will be selected. For example, can behave like either or . It can refuse to accept or and is only obliged to communicate if the environment offers both and . Nondeterminism can be inadvertently introduced into a nominally deterministic choice if the initial events of both sides of the choice are identical. So, for example, is equivalent to Interleaving The interleaving operator represents completely independent concurrent activity. The process behaves as both and simultaneously. The events from both processes are arbitrarily interleaved in time. Interface parallel The interface parallel operator represents concurrent activity that requires synchronization between the component processes: any event in