\(x(y)\)
\(\overline{x}y\)
\((\nu x)(\nu y)\overline{x}y\)
\((\nu x)(\nu y)\overline{x}y\)
\(((\nu x)(y(a).\overline{a}x + \overline{b}a)) | (\nu y)x(a).P\)
\((\nu x)y(a).\overline{a}x + \overline{b}a | (\nu y)x(a).P\)
\((N/\equiv,+,\varnothing)\) is a symmetric monoid
\((P/\equiv,|,\varnothing)\) is a symmetric monoid
\(!P \equiv P|!P\)
\((\nu x)\varnothing \equiv \varnothing\)
\((\nu x)(\nu y)P \equiv (\nu y)(\nu x)P\)
If \(x\) is not a free name in \(P\) then \((\nu x)(P|Q) \equiv P|(\nu x)Q\)
\(\overline{x}z.Q | x(y).P \rightarrow P\{z/y\}|Q\)
\(\frac{P \rightarrow P'}{P|Q \rightarrow P'|Q}\)
\(\frac{P \rightarrow P'}{(\nu x)P \rightarrow (\nu x)P'}\)
\(\frac{Q \equiv P, P \rightarrow P', P' \equiv Q'}{Q \rightarrow Q'}\)
So far, we have seen “sends” and “recieves” that pass one name. If we are thinking of processes as functions, we might want a function that has an arity > 1.
\(x(y).x(z).P | \overline{x}a.\overline{x}b\)
\(x(y).x(z).P | \overline{x}a.\overline{x}b | \overline{x}c.\overline{x}d\)
\(x(y).x(z).P | \overline{x}a.\overline{x}b | \overline{x}c.\overline{x}d\)
\(\rightarrow\) \(x(z).P\{a/y\} | \overline{x}b | \overline{x}c.\overline{x}.d\)
\(\rightarrow\) \(P\{a/y,c/z\} | \overline{x}b | \overline{x}d\)