计算机体系结构 E08:有限模型与形式验证边界
计算机体系结构 E08:有限模型与形式验证边界
核心问题
穷举数万个程序都没找到反例,是否等于处理器对任意程序都正确?只有状态空间、初态、程序长度和性质全部明确时,“无反例”才有意义;有限穷举不能自动升级成无界证明或 ISA 合规认证。
附件:E08-formal.json和检查器源码。
范围与证据等级
证据等级为功能执行。模型固定 4 个寄存器、8 个 memory word、初始寄存器 (0,1,2,4) 和全零内存;text 区为 word index [0,4)。指令集合共有 208 个具体变体,程序长度只取 0、1、2。
检查的两个性质是 x0 恒为 0,以及 store 不修改 text 区。sw 地址在模型里是 word index,不是 RISC-V 字节地址。异常、中断、页表、并发和更长程序均未覆盖。
核心案例:43,473 来自完整计数,不是估计
长度 0 有 1 个空程序,长度 1 有 208 个程序,长度 2 有 208²=43,264 个程序,总数为 43,473。检查器逐个执行并断言两个性质。
错误变体允许写 x0,长度 1 的 addi x0,x0,-1 立即给出反例,x0 变成 0xffffffff。反例说明性质检查能捕获这一类故障,但不证明检查器没有共同建模错误。
模式:结论强度不得超过量词范围
1 | |
差分测试、有界模型检查和协议状态搜索都应把量词写进结论。要得到无界性质,还需要归纳不变量、定理证明或覆盖更强的形式框架。
验收结果
python3 examples/computer-architecture/run_batch.py E01-E08 退出 0,完整遍历 43,473 个程序,两个性质均通过;错误 x0 变体产生一条长度 1 的反例。输出保留 unbounded_proof=false。
模式速查
| 方法 | 当前覆盖 | 不能替代 |
|---|---|---|
| 有限穷举 | 声明空间内全部程序 | 无界证明 |
| 故障注入 | 检查器可发现该 bug | 检查器完备性 |
| 差分测试 | 两个模型在样本上一致 | 两者都符合 ISA |
一手参考资料
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.





