rholang学习(二) pi 演算 Pi Calculus
本文属作者原创,转载请注名出处
rholang学习(二) pi 演算 Pi Calculus本系列目录
rholang 学习(一) Lambda演算 Lambda Calculus
rholang学习(二) pi 演算 Pi Calculus
rholang学习(三) rholang
0. 参考文献
http://www.di.ens.fr/~zappa/teaching/mpri/2006/pisyntax.pdf
1.1 Pi Calculus语法
Pi Caculus有三个元素:消息(message),进程(process),通道(channel),其中message可以理解为传入传出值,进程是一个函数,而通道是函数的出入口。
文中,消息用x,y,z表示,通道用a,b,c表示,进程用P,Q,R表示。
任何Pi Calculus语句都可以分解为如下的某一种情况
\(P, Q = \\ \quad c(x).P\quad wait\, message\, x\, from\, channel\, c, \,then\, run\, P\\ \quad \overline{c}<x>.P\quad send\, message\, x\, to\, channel\, c,\, then\, run\, P\\ \quad P | Q\quad run\, P, \, Q \, in\, parallel \\ \quad (\nu c)P \quad create\, a\, new\, channel\, c\, then\, run\, P\\ \quad !P \quad Repeatedly\, copy\, P\\ \quad 0 \quad terminate\)
1.2 Pi Calculus操作
\(P | 0 \equiv P\)
\(P | Q \equiv Q | P\)
\((P |Q) | R \equiv P | (Q | R)\)
\(!P \equiv !P | P\)
\((\nu a)(\nu b)P \equiv (\nu a)( \nu b)P\)
\((\nu c)(P | Q) \equiv (\nu c) P | Q, 如果c出现在Q中\)
\(\overline{c} <x>.P | c(y).Q \equiv P | Q[y=x], \quad将Q中的y用x代替\)
2. 例子
$ (\nu x)(\overline{x} \langle z \rangle.0 | x(y). \overline{y}\langle x \rangle . x(y).0 ) | z(v) . \overline{v}\langle v \rangle. 0\\ = (\nu x)(0| \overline{z}\langle x \rangle . x(y). 0 ) | z(v). \overline{v}\langle v \rangle .0 \\ = (\nu x)(0| x(y). 0 | \overline{x}\langle x \rangle .0) \\ = {\displaystyle (\nu x)(0|0|0)}\\ = 0$
例2 ++x
\(!c(a,x).\overline{a}<x+1>\)
\(c(a,x).P\) 表示通道c等待消息a,x,然后启动P。其中a是一个通道,x是变量。
\(P = \overline{a}<x+1>\) 表示P将x+1输出到通道a
!代表不断自我复制,以满足频繁的调用。
所以可以这么理解,pi calculus中是没有函数这个概念的,\(c(x).P\) 中消息在经过通道之后,即和P绑定,在 \(\overline{c}<x>\) 传出 x之后,P随之销毁。为了完成一个函数可以反复调用的功能,必须不断自我复制。
同lambda calculus一样,pi calculus是Turning complete,所以他和lambda calculus拥有同样的表达能力:能递归,循环等等。