Skip to content

编译器后向模拟

Compiler backward simulation · Backward simulation proof for compilers · 编译正确性的后向模拟

从目标执行步反向要求源语义给出同迹匹配,以直接排除编译结果新增源程序不允许的行为。

条目类型
方法

形式陈述

沿用源状态 s、目标状态 q 与带迹标号的小步语义。编译器后向模拟仍建立状态关系 R(s,q),但逐步责任从目标出发:

R(s,q)qtTqs. stSsR(s,q).

还需每个目标初态关联某个源初态,目标正常终态、trap 与外部调用结果能由相关源状态匹配。若目标静默步可由源零步匹配,则应给目标侧阶段或相关状态对一个良基度量,并要求每次这种停顿严格下降;否则目标可能无限执行静默步,而源一直停在正常状态。

终态条款应保证:若相关目标状态以 v 终止,源能经允许的静默步到达对应的 v 终态;源作为非确定系统仍可另有其他后继,行为包含并不禁止它们。目标 stuck 只有在编译契约把它解释为源允许的 trap、UB 后行为或相同 stuck 时才可接受。对无限迹的结论不能只由有限路径归纳自动获得,通常还需共归纳、有限分支条件,或语义库已经提供的 simulation-to-behavior 定理。

在事件拼接、无限执行与终态条件完备时,沿目标执行归纳或共归纳可得

BehT(C(P))BehS(P),

正好对应语义保持阶段采用的精化方向。关系可一对多,源为非确定系统时,每个目标后继可以选择不同源匹配;量词次序不能改成先固定一个源后继来覆盖所有目标选择。

直觉

后向模拟像审查已经生成的机器执行:目标每做一件可见或内部工作,都要回到源模型找到合法来历。因为调查从目标路径开始,目标若多出一个崩溃、输出或分支,证明会立即卡住;这与“目标不能新增行为”的安全诉求方向一致。

“后向”说的是匹配责任,不是倒放时间。源仍从初态向后继前进,目标也向后继前进;只是全称量化首先挑目标步,再要求源追上。把箭头真的逆转会得到前驱可达性问题,不是编译器 backward simulation。

例子与边界

设源把赋值拆成求值与写回两步,目标用一条原子加法指令完成 x:=x+1。目标从 q 一步到 q 时,源从相关状态 s 先算出临时值,再写回,两步迹均为空并到达 s,且新环境中的 x 相等。因此一个目标步可由源若干步匹配;步数不相等不妨碍行为包含。

静默停顿反例取目标状态 q0q1q2,每步无事件,而源状态 s 已经终止。若允许每个目标步都由源零步匹配并始终令 R(s,qi),形式上的局部菱形成立,却把目标发散伪装成源终止。要求自然数阶段随零步匹配严格下降会排除此证明,因为不存在无限下降链。

后向模拟也不自动保留源的全部选择。若源可返回 01,目标固定返回 0,每条目标行为都有源见证,后向模拟成立;这正是合法消除非确定性。若应用还要求概率分布、公平性或“每个源选择都可实现”,必须采用更强观察或双向性质。

推论与应用

后向模拟适合直接组合成目标行为精化,但构造关系有时比前向归纳困难,尤其当源非确定步骤必须在看到目标后继后选择。标准编译验证常先建立较自然的编译器前向模拟,再在源 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.
关系图谱10 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

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