**Performance Evaluation Process Algebra** (**PEPA**) is a stochastic process algebra designed for modelling computer and communication systems introduced by Jane Hillston in the 1990s. The language extends classical process algebras such as Milner's CCS and Hoare's CSP by introducing probabilistic branching and timing of transitions.

Rates are drawn from the exponential distribution and PEPA models are finite-state and so give rise to a stochastic process, specifically a continuous-time Markov process (CTMC). Thus the language can be used to study quantitative properties of models of computer and communication systems such as throughput, utilisation and response time as well as qualitative properties such as freedom from deadlock. The language is formally defined using a structured operational semantics in the style invented by Gordon Plotkin.

As with most process algebras, PEPA is a parsimonious language. It has only four combinators, *prefix*, *choice*, *co-operation* and *hiding*. Prefix is the basic building block of a sequential component: the process (*a*, *r*).*P* performs activity *a* at rate *r* before evolving to behave as component *P*. Choice sets up a competition between two possible alternatives: in the process (*a*, *r*).*P* + (*b*, *s*).*Q* either *a* wins the race (and the process subsequently behaves as *P*) or *b* wins the race (and the process subsequently behaves as *Q*).

The co-operation operator requires the two "co-operands" to join for those activities which are specified in the co-operation set: in the process *P* < *a*, *b*> *Q* the processes *P* and *Q* must co-operate on activities *a* and *b*, but any additional activities might be performed independently. The reversed compound agent theorem gives a set of sufficient conditions for a co-operation to have a product form stationary distribution.

Finally, the process *P*/{*a*} hides the activity *a* from view (and prevents additional processes from joining with it).

## Syntax

Given a set of action names, the set of CCS processes is defined by the following BNF grammar:

The parts of the syntax are, in the order given above

- action
- the process can perform an action
*a*at rate and continue as the process*P*. - choice
- the process
*P+Q*might behave as either the process*P*or the process*Q*. - cooperation
- processes
*P*and*Q*exist simultaneously and behave independently for actions whose names don't appear in*L*. For actions whose names appear in*L*, the action must be carried out jointly and a race condition determines the time this takes. - hiding
- the process
*P*behaves as usual for action names not in*L*, and performs a silent action for action names that appear in*L*. - process identifier
- write to use the identifier
*A*to refer to the process*P*.

## Tools

- for Eclipse
- for fluid analysis of massively parallel systems