“偏序约简通常从状态探索中删去冗余交错;展开则显式构造事件及 token 的因果结构。二者目标相近,保存的数据对象和正确性证明不同。Mazurkiewicz 迹把独立动作交换归为同类,可帮助理…”
形式陈述
独立字母的同余
给定有限字母表
要求
由这些交换生成的最小同余
商上的乘法为
这里的 trace 不是普通动作序列本身,而是许多序列的商类;同一个类保留依赖事件次序,遗忘独立事件的任意线性排列。
直觉
三事件实例
设
通过交换相邻独立的
该 trace 的因果偏序有
若实现中
把这个词商解释为可执行行为时,独立动作还须互不改变对方的使能性,既不能禁用也不能启用对方。若
动作标签过粗也会制造假独立。两个 write 标签访问不同地址时可交换,访问同一地址时不可交换;只用操作名作字母表无法同时准确表达两种情况,可把地址纳入事件标签或保守视为依赖。
例子与边界
dependence graph 表示
对词
两个词属于同一 trace,当且仅当其带标签依赖偏序同构。图表示避免枚举等价类中可能阶乘多的线性词,并直接展示哪些事件必须先后。
相同字母的不同出现是不同事件节点。由于
trace prefix 可定义为偏序的下闭事件集(ideal):若事件被保留,它的全部因果前驱也必须保留。随意从 dependence graph 中删除一个中间原因、保留后继,不对应合法执行前缀。
两个线性词的普通字符串前缀可能不同,却代表同一 trace prefix。例如
Foata normal form
一个 trace 可分成并发层
每层
对上例,第一层可为
若动作带不同持续时间、资源限制或概率,简单并发层不再给出调度成本;trace monoid 只编码交换关系。
推论与应用
与偏序约简的接口
偏序约简尝试从每个相关 Mazurkiewicz trace 中探索至少一个代表。sleep set、persistent set 和 DPOR 用不同方式避免重复线性化。
保存终态对独立确定动作较直接,保存中间可见状态、死锁和 liveness 还需附加条件。商类相同不自动表示所有时序公式都无法区分其中线性化。
动态执行中独立性可能依地址和状态变化,需用 event-specific dependence;固定字母关系是干净理论模型,但可能过粗或不可靠。
trace language 与闭包
若一个词语言
例如“
无限 Mazurkiewicz traces 还需处理事件偏序的局部有限性和无限线性化。有限词商的结论不能无条件覆盖 fairness 或无限发散路径。
局部有限性要求每个事件只有有限多个因果前驱,使某个线性执行能在有限位置安排它。允许一个事件依赖无限过去却仍声称“最终发生”,会得到没有实际线性化见证的偏序对象。
公平性也不是 trace 类自动属性:有限事件交换保持偏序,但无限执行中某个持续可用事件是否永远被推迟,需要额外的无限行为条件。
算法表示边界
dependence graph 的传递约简在并发度高时紧凑,但构造仍需为每个新事件连接最近的依赖前驱。若简单给所有早先依赖事件加边,语义正确却可能产生二次空间;若只按相同线程连边,又会漏跨线程冲突。
规范形比较可判定两个有限词是否同 trace,但若独立关系来自求解器动态判断,规范化结果还需绑定当时的地址与状态条件,不能跨执行无条件复用。
把独立动作交换看成同一执行的不同线性化,可以在Petri 网展开中看到具体的 token 因果依据。两个事件必须既无因果先后又不冲突,才能同处一个配置;只看动作之间没有有向路径,还不能排除共享输入资源造成的竞争。
参考资料
- Antoni Mazurkiewicz, “Trace Theory,” in Petri Nets: Applications and Relationships to Other Models of Concurrency, Springer, 1987, pp. 278–324。
- Volker Diekert and Grzegorz Rozenberg, eds., The Book of Traces, World Scientific, 1995, Chs. 1–3。
- Patrice Godefroid, Partial-Order Methods for the Verification of Concurrent Systems, Springer, 1996, Chs. 2–4。