rholang学习(二) pi 演算 Pi Calculus

本文属作者原创,转载请注名出处

rholang学习(二) pi 演算 Pi Calculus

本系列目录
rholang 学习(一) Lambda演算 Lambda Calculus
rholang学习(二) pi 演算 Pi Calculus
rholang学习(三) rholang

0. 参考文献

wiki page

http://www.di.ens.fr/~zappa/teaching/mpri/2006/pisyntax.pdf

FAQ on π-Calculus

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拥有同样的表达能力:能递归,循环等等。

posted @ 2018-03-10 09:02  qxred  阅读(1857)  评论(0编辑  收藏  举报