“Petri 网中有一类可直接从结构读出的布尔不变量:虹吸一旦为空便保持空,陷阱一旦被标记便保持被标记。它们跟踪资源集合的空与非空,不要求 token 数精确守恒,因此与线性 place in…”
形式陈述
在普通Petri 网中,对库所集合
- 若
,称 为虹吸(siphon):任何向它补充 token 的变迁,也先从它消耗 token - 若
,称 为陷阱(trap):任何从它消耗 token 的变迁,也向它补回至少一个 token
集合
直觉
虹吸的空状态形成自锁:要把第一个 token 放回来,操作本身已经要求里面有 token,因此永远无法启动。陷阱则相反,任何可能拿走最后一个 token 的操作,都必须往集合里放回一些东西。
中文名称容易让人把“陷阱”理解成永远死锁。这里它只保证集合总有 token,里面的变迁仍然可能继续工作,其他库所也可能死锁。
例子与边界
逐个变迁核验,不看图猜方向
取库所
所以
集合
一步证明足以归纳全部执行
若虹吸
若陷阱
陷阱不等于守恒量
单库所网的变迁
相反,某个线性守恒量可能横跨多个库所并带不同权重,不能直接把其支撑集合与任意虹吸或陷阱等同。二者提供互补的不可达证据。
推论与应用
若初态某虹吸为空,而目标要求其中有 token,则目标不可达;若初态某陷阱被标记,而目标把它全部清空,也不可达。检查一组指定库所是否满足包含关系,只需扫描其相关弧,因而很便宜。
枚举所有极小虹吸或陷阱可能有指数输出规模,不能从单个集合易检查推出全部结构易枚举。即使没有发现上述阻碍,也不能宣布目标可达;这些都是必要条件筛查。
在资源协议中,空虹吸常解释一组资源如何永久耗尽;被标记陷阱常给出“至少保有一份资源”的归纳不变量。是否足以证明全网无死锁,还取决于额外结构,不能对任意加权网无条件推广。
参考资料
- [1] Javier Esparza, Petri Nets: Lecture Notes,§4.4,Definitions 4.4.1 及陷阱定义、Proposition 4.4.3。