“验证器可采用前向模拟证书、后向模拟证书、SMT 可证等价或专用校验条件。不同方法仍要落到同一观察契约。验证多个阶段时,可以逐阶段检查并组合精化,也可对源与最终目标做全局验证;前者定位清楚,后…”
形式陈述 ​
沿用源状态
还需每个目标初态关联某个源初态,目标正常终态、trap 与外部调用结果能由相关源状态匹配。若目标静默步可由源零步匹配,则应给目标侧阶段或相关状态对一个良基度量,并要求每次这种停顿严格下降;否则目标可能无限执行静默步,而源一直停在正常状态。
终态条款应保证:若相关目标状态以
在事件拼接、无限执行与终态条件完备时,沿目标执行归纳或共归纳可得
正好对应语义保持阶段采用的精化方向。关系可一对多,源为非确定系统时,每个目标后继可以选择不同源匹配;量词次序不能改成先固定一个源后继来覆盖所有目标选择。
直觉
后向模拟像审查已经生成的机器执行:目标每做一件可见或内部工作,都要回到源模型找到合法来历。因为调查从目标路径开始,目标若多出一个崩溃、输出或分支,证明会立即卡住;这与“目标不能新增行为”的安全诉求方向一致。
“后向”说的是匹配责任,不是倒放时间。源仍从初态向后继前进,目标也向后继前进;只是全称量化首先挑目标步,再要求源追上。把箭头真的逆转会得到前驱可达性问题,不是编译器 backward simulation。
例子与边界
设源把赋值拆成求值与写回两步,目标用一条原子加法指令完成
静默停顿反例取目标状态
后向模拟也不自动保留源的全部选择。若源可返回
推论与应用
后向模拟适合直接组合成目标行为精化,但构造关系有时比前向归纳困难,尤其当源非确定步骤必须在看到目标后继后选择。标准编译验证常先建立较自然的编译器前向模拟,再在源 receptive、目标 determinate、初终态与迹条件满足时应用转换定理。条件是定理的一部分,不能只引用“确定性”一个词。
receptiveness 处理环境事件的选择:若目标能接受某个输入事件,源在相同历史下也应能以兼容事件继续;determinacy 则约束目标从同一状态的可见选择及静默步。它们共同帮助把“源挑一步、目标跟随”的前向见证重排为“目标先走、源解释”的后向见证。普通内部非确定性若不满足这些性质,重排可能失败。
多阶段后向模拟的复合还需处理中间层的静默发散。若每段都允许 stuttering,简单关系复合可能找不到一个共同下降度量;常用词典序或阶段索引组合,但必须证明良基。对于 UB,源一旦进入允许任意行为的顶部,后续目标匹配可以宽松;在此之前仍需逐步维持关系。
参考资料
- Nancy A. Lynch and Frits W. Vaandrager, “Forward and Backward Simulations: I. Untimed Systems,” Information and Computation 121(2), 1995, pp. 214–233.
- Xavier Leroy, “A Formally Verified Compiler Back-end,” Journal of Automated Reasoning 43(4), 2009, §§3–4 and 8.
- Xavier Leroy, “Formal Verification of a Realistic Compiler,” Communications of the ACM 52(7), 2009, pp. 107–115.