title: PEPA
text: # PEPA
  
  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 other activities may 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 other processes from joining with it).
  
  ## Syntax
  
  Given a set of action names, the set of PEPA processes is defined by the following BNF grammar:
  
      $P::=(a,\lambda ).P\,\,\,|\,\,\,P+Q\,\,\,|\,\,\,P{\stackrel {\triangleright \!\!\triangleleft }{\scriptstyle {L}}}Q\,\,\,|\,\,\,P/L\,\,\,|\,\,\,A$
  
  The parts of the syntax are, in the order given above
  
  ### action
  
      the process $(a,\lambda ).P$ can perform an action a at rate $\lambda$ and continue as the process P.
  
  ### choice
  
      the process P+Q may behave as either the process P or the process Q.
  
  ### cooperation
  
      processes P and Q exist simultaneously and behave independently for actions whose names do not 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 $\tau$ for action names that appear in L.
  
  ### process identifier
  
      write $A{\overset {\underset {\mathrm {def} }}{=}}P$ to use the identifier A to refer to the process P.
  
  ## Tools
  
  * PEPA Plug-in for Eclipse
  * ipc: the imperial PEPA compiler
  * GPAnalyser for fluid analysis of massively parallel systems
  