Skip to content

方法Method

k 归纳

k-induction · Temporal k-induction · k步归纳

分别排除可达初始前缀错误与任意安全窗口后的错误,以两个可复算义务证明全局安全,并展示不可达环导致的不完备。

形式陈述 ​

两类查询,两个起点 ​

给定状态空间 S、初始谓词 I、转移关系 T 和安全谓词 P,取整数 k≥1。本页不要求每个状态都有后继。k 归纳用以下两个反例公式:

Bk=⋁j=0k−1(I(s0)∧⋀i=0j−1T(si,si+1)∧¬P(sj)),Dk=(⋀i=0k−1P(si))∧(⋀i=0k−1T(si,si+1))∧¬P(sk).

Bk 是有界模型检查到转移深度 k−1 的初始反例查询,包含 j=0。Dk 有 k 条转移和 k 个安全前态,不含初始条件 I(s0):它检查任意连续安全窗口能否再跨一步到坏状态。空转移合取取真,所以 k=1 的 base 就是初态安全。

若二式都 UNSAT,则全部从 I 出发的可达状态满足 P。Bk 为 SAT 给真实可达反例;Dk 为 SAT 只给归纳步反例,其起点可能不可达。这个区别沿用不变式与归纳不变式的量词,而不是求解器输出格式上的区别。[1, §2.2]

安全定理的证明 ​

反设存在坏状态,取一条首次到坏状态的最短执行 s0,…,sn。若 n<k,它直接满足 Bk 的第 n 个析取支,矛盾。若 n≥k,首次错误之前全部状态安全,于是最后 k 条转移及前 k 个安全状态满足 Dk,仍矛盾。

这个证明只需有限坏前缀,不假设程序最终终止,也不假设转移总定义。它证明“任何可达状态不坏”,不证明响应最终发生等活性性质。

直觉

一步屏障不够时,多看一段历史 ​

普通归纳假设当前一个状态安全,便要求下一状态安全。k 归纳要求连续 k 个前态都安全,再证明下一状态安全。有些不可达状态虽然自己安全,却根本没有足够长的安全前缀;扩大窗口会把这些干扰排除。

窗口不能代替入口检查。一个系统可能从一开始就坏,此时“连续若干步安全”永远不成立,归纳步空真。base 的任务是把实际初始执行接进这个归纳规则。

例子与边界

一步失败,两步成功 ​

取 S={0,1,2,3},I={0},全部转移为

0→1,1→1,2→3,3→3,P(s)≡s≠3.

k=1 时,B1 UNSAT,因为初态0安全;D1 SAT,见证为 (2,3)。这不是实际错误轨迹,因从0只能到1,再停在1。

k=2 时,B2 同时检查深度0和1,只有初态0及其后继1,都安全。若 D2 SAT,需要两个连续安全状态 u,v 再到3。能到3的安全 v 只能是2,但图中没有进入2的边,所以这样的窗口不存在,D2 UNSAT。二式一起证明全局安全。

如果仅报告“BMC查了两步没错”,还没有这个全局结论;证书中必须另交任意起点的 D2 排除理由。

不可达安全环使所有k都失败 ​

在同一图添加 2→2。实际可达集仍为 {0,1},性质仍真,但对每个 k≥1 都有

2,2,…,2⏟k 个安全状态,3

满足 Dk。因此只是不停加大 k,不保证有限状态安全系统最终得到证明。下载脚本复算 k=1,…,8;上面的任意 k 构造才证明全部深度都会失败。

可加入已独立验证的辅助不变式 Q(s)≡s≤1,用 P∧Q 做一步归纳。初态0满足,边 0→1,1→1 保持,故可直接证明并推出 P。若 Q 只是未经验证的猜测,不能悄悄用它排除状态2;可先通过Houdini或人工归纳检查建立证书。

别把不可延长短路径丢掉 ​

设系统只有初态0,0已经坏且没有出边。B3 的 j=0 支仍可满足,准确报告错误。若误把 base 写成必须先走满两条转移再问此前是否坏,整个公式不可满足,会漏掉这个短反例。本页逐个前缀的析取避免依赖停顿补边。

另取一个坏初态自环系统。D1 由于要求安全源状态而 UNSAT,B1 却 SAT。这个例子说明归纳步通过并不足够,甚至不能证明初始执行的第一瞬间安全。

推论与应用

证书、成本和增强版本 ​

一个可检查报告应包括 k、状态编码、I,T,P、各 base 深度的结果、归纳步查询及其证据。真实反例要给从初态开始的逐步路径;归纳失败要明确标记为可能不可达的窗口;unknown 和超时均不给安全结论。

按时间帧共享前缀的布尔电路表示,base 的各前缀可以逐层增量建立,k 个深度总构造规模为 O(|I|+k(|T|+|P|+1));step 同样复制 k 帧。若不共享而把每个前缀完整复制,base 大小可能增至二次量级。公式规模线性不表示 SAT/SMT 求解时间线性,显式枚举长度 k 的路径也可能指数增长。

有限状态系统可进一步在归纳窗口加入“两两状态不同”的简单路径条件。其可靠性需回到最短坏路径:最短路径不会重复状态,否则删去环可得到更短坏路径。因此,当 base 覆盖相应短长度时,排除所有简单安全窗口已足够;有限状态也限制了这种窗口的最大长度。原文[1]讨论该增强及增量求解。本页脚本没有加入唯一状态条件,上面不可达自环反例正用于说明基础版本的边界。

PDR/IC3通过学习阻塞子句得到归纳屏障,k归纳通过展开窗口寻找证明;二者可配合辅助不变式,但不是同一个算法的不同名字。

迁移练习:将原四状态图的初态改成2。k=1 的 base 仍通过而 step 失败;k=2 的 base 在深度1发现真实路径 (2,3),应报告不安全,不能因原来的 D2 UNSAT 就重用安全结论。初始化也是证书的一部分。

参考资料

[1] Niklas Eén、Niklas Sörensson,Temporal Induction by Incremental SAT Solving,Electronic Notes in Theoretical Computer Science 89(4),2003,543–560页;作者上传全文§2.2给 base、step 与 Unique 条件,§§3–4讨论增量求解及可靠性。本文明确采用不含 Unique 的基础k归纳,并独立固定索引和给出最短坏前缀证明。

[2] Chalmers出版记录核对两位作者、卷页与2003年出版信息;作者稿页眉另标2004,不据稿件页眉改写正式出版年。

关系图谱9 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

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