Theo Verelst
Process Algebra refers to mathematical formulation and reasoning rules for defining processes, made up of events where we focus on communication events which occur between processes.
A process can be represented by an identifier, and is seen as something which can somehow decide to engage in a communication with another process, or maybe with itself, and we take it that we can have n processes which can communicate between 2 at one instance in time.
Because we do not explicitly discern what goes on in a process (sometimes the word 'agent' is preferable', though a more than loose coupling with the unix idea of a process is not so bad as thought frame), the only thing we can be sure of is when a communication takes place, which can be given a notation such as
com(Pa,Pb)
or
com(Pa, Pb, Mi)
where P is a process and M is a message, or the communication content. The former is a more general formulation which leaves room for more reasoning.
We can assume a process changes state after a communication of a certain kind with a certain other process took place, and we could make a list of all possible sequences of communication a set of processes or agents can take part in, possibly in an inductive way.
For instance:
com(Pa,Pb,M1) or: com(Pa,Pb,M1) com(Pa,Pc,M2) com(Pb,Pc,M2) com(Pb,Pc,m3) com(Pb,Pa,m3)
We could take it that the first two arguments of the com operator are order insensitive.
A general way of speaking about processes somehow relevant to a problem is 'composition' which means they are being enabled to communicate. Also we could serialize them, a get a certain sequence.
Pa | Pb composition pa ; Pb sequence
A limit operator can be used to 'rule out' a certain communication from the set of possible communications between certain composed processes:
(Pa | Pc) \{M3}
would indicate the parallel composition of two processes restricting the allowed communications.
Strong and weak Bisimulation
Traces
Links with real word programming