Skip to content

大步语义

Big-step semantics · Natural semantics

用表达式直接求值到最终结果的归纳判断描述程序执行。

条目类型
模型

形式陈述

大步操作语义以归纳判断 ev 直接连接程序与其最终结果;这种判断可以为无类型语言独立定义,不需要先给表达式赋型。以调用值 λ 演算为例,可给出规则

vve1λx.te2v2t[x:=v2]ve1e2v.

有状态语言把判断扩展为 e,σv,σ。大步语义通常按推导树归纳定义,因此一棵有限推导树对应一次终止执行。natural semantics 也能描述非严格语言:Launchbury 风格的按需调用语义把共享堆放进判断,求值一个 thunk 后返回更新过的堆;这改变配置与规则,不改变“大步判断直达结果”的方法定位。

直觉

大步语义像一个递归解释器的规格:先求子表达式的结果,再组合成整体结果,中间小步骤不进入判断。它让“这个程序算出什么”非常直接,也使按语法结构证明性质较为简洁。代价是路径被压缩掉了:两个以相同值结束但求值顺序不同的程序可能得到同一个判断。更关键的是,在普通归纳大步语义中,发散和卡住都表现为“无法构造推导”,需要额外机制才能区分。

例子与边界

1+(2×3),先用乘法规则得到 2×36,再用加法规则得到 1+67,整次计算由一棵有限推导树表示。有存储时,规则必须把前一个子表达式产生的存储传给后一个子表达式,才能刻画副作用顺序。

边界例子是无限循环与类型错误:在最朴素的大步语义中,while true do skip1 true 都没有 ev 的推导,一个是发散,一个是卡住。可另用共归纳定义 e、加入显式错误结果,或用燃料参数补足这一区分;共归纳发散判断是与有限求值推导配套的另一关系,不是把一棵无限证明树直接当成普通 ev。大步语义也不适合直接枚举并发执行的每个交错步骤。

推论与应用

大步语义常用于定义解释器、常量求值和表达式语言的参考规范。证明算法正确性时,可对求值推导树归纳;编译器正确性也常陈述为源程序与目标程序的大步结果一致。

小步语义的对应关系是重要校验:对终止程序,通常证明 ev 当且仅当 ev。异常和状态可通过扩展结果与配置自然纳入,但非终止行为需单独处理。

由于大步判断压掉中间配置,它适合证明输入—结果关系,却不能直接提供轨迹语义所需的逐步路径;检查中间安全状态、并发交错或时序性质时,通常先选小步转移系统,再运行模型检查或抽象解释算法。

参考资料
  • Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016,Parts I–XVIII。
  • Gordon D. Plotkin, A Structural Approach to Operational Semantics, DAIMI FN-19, 1981; reprinted 2004,Full report。
关系图谱2 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

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