“状态集合与转移关系给出最一般的无标号状态机骨架,动作和输入输出再按观察需求逐层加入。轨迹与路径语义从最大执行提取可观察行为;若还要解释状态命题,可在其上建立Kripke 结构。这些语义对象支…”
形式陈述 ​
状态上的命题标记 ​
Kripke 结构写作
其中
给出当前状态中为真的原子命题,因此
Kripke 结构比单个命题赋值多出转移关系,使逻辑可以量化未来路径。对
保留命题观察,却遗忘产生相同标记序列的具体状态身份。与标号转移系统相比,LTS 把动作放在边上,Kripke 结构把逻辑事实放在节点上。通过增加中间状态可以把边动作编码成命题,但这会增加状态并改变一步粒度;两种标记位置不能视为零成本互换。
路径与 total 约定 ​
从状态
许多 CTL、CTL* 和经典 LTL 模型检查教材要求
初始集合可以含多个状态,用来表示未知输入或环境初始选择。判断整个系统满足状态公式
只检查一个方便状态不能替代上述全称量词。公平性也不是五元组的隐含成分:若只量化公平路径,应另给
直觉
双进程互斥模型 ​
令每个进程位置属于
若模型错误地允许两个进程从
在末状态有
“每个尝试进程最终进入临界区”还需要观察整条路径,并通常依赖调度公平性。状态图没有坏状态只能证明互斥安全性,不能由此推出无饥饿。
例子与边界
分支结构为何重要 ​
取
并令
前一条在一步后到达 success,后一条永远没有 success。因此
这正是分支时序语义需要保留的结构。若只列出一条样例执行,存在量词看似得到见证,却完全没有检查其他分支;若把所有未来先压成一个动作集合,分支选择发生在何时也会丢失。
CTL 把路径量词
推论与应用
与其他 Kripke 模型的边界 ​
模态逻辑和直觉主义逻辑也使用称为 Kripke frame/model 的结构,但可达关系、单调赋值和满足关系的条件随逻辑而变。本页的对象专指并发系统模型检查中带状态标记的转移结构,不是“一阶模型论中的任意结构”的总称。
Kripke 结构也不含转移概率。若从状态出发的多条边带概率,需要 Markov 链或 MDP;把非确定分支平均分配概率会擅自改变系统语义。
有限 Kripke 结构可显式枚举,状态由多个变量组合时却可能指数增长。模型检查问题规定如何判定
参考资料
- Edmund M. Clarke, Orna Grumberg, and Doron A. Peled, Model Checking, MIT Press, 1999, Ch. 2。
- Christel Baier and Joost-Pieter Katoen, Principles of Model Checking, MIT Press, 2008, §§2.1, 3.1, 6.1。
- Michael Huth and Mark Ryan, Logic in Computer Science, 2nd ed., Cambridge University Press, 2004, Chs. 3–4。