“对CTL,每个子公式对应满足状态 OBDD。布尔联结直接用集合运算,$EX\varphi$ 用 $Pre(Sat(\varphi))$。”
状态公式语法 ​
CTL 公式在Kripke 结构的状态上解释。除原子命题和布尔联结外,时间构造必须由路径量词
例如
当且仅当存在后继
路径量词与时序算子成对 ​
CTL 不是“给一个任意 LTL 公式前加一次 A 或 E”。公式
写自然语言时也要保留量词作用域。
恢复服务的分支例子 ​
状态 degraded 有两条后继:一条进入 repairing 并最终到 healthy,另一条进入 failed 自环。于是初始状态满足
因为存在成功修复路径;却不满足
因为失败分支永远到不了健康状态。
若每个可达状态都至少保留一条通向 healthy 的路径,则
只检查状态图中“能找到 healthy”会误把存在性当全称性,这正是 CTL 用
以状态集合求值 ​
对每个子公式
的最小不动点;
的最大不动点。有限状态空间中迭代至集合不再变化即可。
这些等式也解释为何
表达边界 ​
CTL 能表达“从每个状态存在一条继续恢复的路径”,却不能表达某些沿同一条路径反复出现的性质;LTL 能表达
更强的 CTL* 允许状态公式与路径公式两层自由嵌套,但表达力增加不意味着规格更易读,也不意味着所有算法保持 CTL 的复杂度。
CTL 模型检查仍只验证给定状态图。若 Kripke 标记或转移遗漏实现行为,精确的不动点计算会精确回答错误模型的问题。
全称算子可用存在算子和否定对偶化,例如
参考资料
- Edmund M. Clarke and E. Allen Emerson, “Design and Synthesis of Synchronization Skeletons Using Branching Time Temporal Logic,” Logic of Programs, Springer, 1981, pp. 52–71。
- E. Allen Emerson and Joseph Y. Halpern, “Decision Procedures and Expressiveness in the Temporal Logic of Branching Time,” JCSS 30(1), 1985, pp. 1–24。
- Christel Baier and Joost-Pieter Katoen, Principles of Model Checking, MIT Press, 2008, Ch. 6。