Skip to content

轨迹与路径语义

Trace semantics · Path semantics · Execution traces

以状态路径和可观察动作轨迹描述有限、无限与最大行为,并说明投影和隐藏会遗忘什么。

条目类型
定义

形式陈述

路径先于轨迹

给定标号转移系统 L=(S,I,A,),一条路径是

π=s0a0s1a1s2,s0I,siaisi+1.

路径保留内部状态和每一步的动作标签。有限路径有最后状态;无限路径包含可数无限多步;若一条有限路径的末状态无后继,它是最大路径。分析持续服务时通常关心无限路径,分析会终止的程序时则不能把有限最大路径丢掉。

动作轨迹先忘掉状态:

tr(π)=a0a1a2.

给定观察映射

h:AO{ε},

h(a)=ε 表示隐藏动作,其他标签可以保留或重命名;可见轨迹是对动作投影逐项应用 h 后删去 ε。特别地,把内部动作 τ 映成 ε 就会删除它。轨迹因而是观察接口选择后的结果,不是路径的另一种拼写。

执行历史常记录并发操作的调用、返回和事件偏序;LTS 路径则由局部转移关系生成一个线性化步骤序列。二者可以互相编码某些观察,却不应默认每份并发历史都已经选择了唯一全序路径。

行为集合与前缀

系统的路径语义和轨迹语义分别是它允许的路径集合与轨迹集合:

Paths(L)={π:π 是从 I 出发的路径},Traces(L)={tr(π):πPaths(L)}.

若只收集有限前缀,则每条轨迹的每个有限前缀也在集合中,形成 prefix-closed 语义。这非常适合安全性:一旦坏事发生,某个有限前缀已经足以见证违反。活性通常需要完整无限行为,因为任意有限前缀仍可能在未来兑现承诺。

有限轨迹集合是否包含非最大前缀必须明确。把“用户发出请求”这一半截执行算作系统完成行为,和仅把它算作可继续前缀,会得到不同的 refinement 与测试结论。

直觉

隐藏内部步骤的例子

设服务收到 request 后有两条内部路径:缓存命中时执行 τcache,缓存未命中时执行 τdb;两者最后都发出 reply。完整路径可以是

s0requests1τcaches2replys3

s0requests1τdbs4replys5.

删除内部标签后,两条路径都有可见轨迹 request reply。若 s3 以后允许 fast-renew,而 s5 只允许 slow-renew,当前短轨迹仍看不出这项分支差异;观察更长轨迹才可能区分。

相同轨迹也可能掩盖分支时机。系统 P 先唯一执行 a 到状态 p,再由 p 选择 bc;系统 Q 在初态就有两条同标号 a 边,分别到只允许 b 与只允许 c 的状态。二者有限可见轨迹同为

{ε,a,ab,ac},

Pa 后仍同时提供 b,cQ 的某次 a 已经承诺其中一个。环境若能在 a 后选择交互动作,就可能分辨它们。trace equality 看不见这项差别;逐步互模拟或 ready semantics 保留了更多分支信息。

路径隐藏为同一可见轨迹
例子与边界

投影、隐藏与重命名

给定可观察动作集 OA,投影 πO 删除不在 O 中的动作。组件组合后,可用投影只观察某个接口;隐藏则把选定动作改成 τ。重命名函数 r:AB 可以把实现级事件归并到规格级事件。

这些操作必须作用于整条行为并尊重顺序。仅比较“出现过哪些动作”的集合会丢失先后与重复次数,例如 open closeclose open 拥有相同动作种类,却显然不是同一轨迹。

投影也不总与最大性相容。一条包含无限多个内部步骤、但只有有限多个可见动作的路径,投影后可能成为有限轨迹;这就是 divergence。若语义把它与正常终止视为相同,就会掩盖系统永远在内部忙等的事实,因此有些模型另外记录发散标记。

状态轨迹与停顿

若状态带原子命题标记 L:S2AP,路径还可投影为状态词

L(s0)L(s1)L(s2).

连续若干状态可能拥有同一可观察标记。把有限次重复压缩后比较得到停顿等价;它适合把实现内部微步视作不可见,但含 next 运算子的时序公式一般能数出这些重复,因而不保持该等价。

路径语义不会自动规定公平性。一个始终使能却永不执行的动作,仍可能出现在系统允许的无限路径中;要排除这种调度,需要另加公平性约束。把期望的公平路径直接从例子中挑出来,会把规格假设伪装成模型事实。

推论与应用

语义边界与使用方式

轨迹等价只比较所选观察接口下的行为集合。接口变粗,更多实现会变得等价;接口变细,原先隐藏的状态、时间或失败原因会重新可见。行为精化常写成

Traces(Impl)Traces(Spec),

表示实现没有产生规格禁止的可见序列。任何这类结论都要同时给出动作字母表、隐藏集合和有限/无限语义;轨迹包含不会自动保持死锁自由、发散敏感性或分支结构。若这些也属于合同,应改用带 failures/divergence 的语义或更强的模拟关系。

时序逻辑在这些执行序列上解释“最终”“始终”“直到”;反例与见证轨迹把逻辑失败还原成一条可读行为。逻辑是对行为集合提出性质,不替代本页对行为本身的定义。

参考资料
  • C. A. R. Hoare, Communicating Sequential Processes, Prentice Hall, 1985, Chs. 1–3。
  • Robin Milner, Communication and Concurrency, Prentice Hall, 1989, Chs. 2–5。
  • Christel Baier and Joost-Pieter Katoen, Principles of Model Checking, MIT Press, 2008, §§2.1–2.3, 3.2。
关系图谱25 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组