Skip to content

定义Definition

求值上下文

施工中 · 内容逐步修订

Evaluation context

用单洞语法集中描述小步语义允许暴露的下一个 redex 及求值顺序。

形式陈述 ​

求值上下文是抽象语法中恰含一个洞 [] 的对象;E[e] 表示把项 e 填入洞。上下文文法规定小步语义允许沿哪些语法位置寻找 redex。

对左到右调用值 λ 演算,可令

E::=[]∣Et∣vE,

其中 v 是值。产生式 Et 允许计算函数位置;只有函数位置成为值后,vE 才允许进入实参。若根计算规则为 r↦r′,完整求值步统一写为

r↦r′E[r]→E[r′].

把根收缩 ↦ 与上下文闭包后的求值 → 分开,可以防止把计算规则和位置规则混为一谈。这里还必须指定调用值根规则为 (λx.t)v↦t[x:=v],其中实参已经是值。只有上下文文法而没有这个侧条件,并不能阻止整个应用在空上下文下提前收缩。

确定策略通常依赖唯一分解定理:每个既非值也非错误的良构闭项,要么明确卡住,要么可唯一写成 E[r],其中 r 是根 redex。证明按项结构分析;每个语法构造的值条件决定应进入哪个子项,上下文文法的互斥性保证唯一。

求值上下文只包含策略允许的下一步位置,不等于上下文等价量化的任意程序上下文。后者可把洞放在函数体、未执行分支或其他任意语法位置,用来测试程序观察;两类上下文的量词范围不同。

直觉

求值上下文把当前控制焦点编码成一个带洞的树。洞外部分记录“算完这里之后还要做什么”,洞内是下一步计算。替换洞内结果便恢复完整程序,不必为每条根规则重复所有外层传播规则。

上下文文法也是策略的可执行规格。是否进入 λ 体、应用先算函数还是参数、条件式是否只算守卫,都集中在这些产生式中;少一项会令合法程序卡住,多一项可能引入非确定性。

求值上下文示意图
例子与边界

对左到右表达式 (1+2)×(3+4),第一步唯一分解为

E=[]×(3+4),r=1+2.

得到 3×(3+4) 后,分解变成 E=3×[]、r=3+4。洞的移动准确记录了顺序。

对 (λx.x)((λy.y)(λw.w)),调用值首先取 E=(λx.x)[],收缩内层得到 (λx.x)(λw.w),再取空上下文收缩为 λw.w。调用名通常用 E::=[]∣Et,配合不要求实参为值的根规则,先收缩外层,得到 (λy.y)(λw.w)。两者都使用无捕获替换,但 redex 的准入条件和上下文文法共同决定策略。

差异在未使用的发散实参上尤其明显。令 Ω=(λz.zz)(λz.zz),它每次收缩都回到自身。对 (λx.λz.z)Ω,调用名直接丢弃 Ω;调用值的外层尚不是允许的根 redex,只能持续进入实参。因而“洞位于哪里”和“洞内是否已可收缩”必须分开检查。

若加入 E::=λx.E,语义会进入尚未调用的函数体,接近完整 β-归约而不是通常弱求值。若同时允许 Et 和 tE 而不加值侧条件,应用两侧都可先走,同一项便可能有两个分解。含绑定器的上下文还须明确填洞是否允许捕获;上述调用值文法没有进入 λ,因此避开了该问题。

推论与应用

在上下文等价的固定语言 L 中,弱传名求值还允许进入条件守卫,但仍不进入 λ 体。例如 (λx:Bool.[ ])true 是合法的闭合布尔测试上下文,却不是下一步求值上下文。定义等价时量化前一种任意程序上下文;缩小到某种测试文法需要另证上下文引理。

求值上下文可重化为续延:上下文本身就是“取得洞中结果后继续做什么”。抽象机器把嵌套上下文拆成显式栈帧;CEK 机器的参数帧与函数帧正对应调用值应用上下文的两种产生式。

异常沿上下文向外传播,控制算子捕获部分上下文,代数效应处理器搜索最近处理边界。唯一分解还常为确定性和进展定理提供关键引理:先找到唯一 E[r],再对根 redex 应用计算规则。

参考资料
  • Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016, Chapter 5。
  • Matthias Felleisen and Robert Hieb, “The Revised Report on the Syntactic Theories of Sequential Control and State,” Theoretical Computer Science 103(2), 1992, pp. 235–271。
  • Gordon D. Plotkin, “A Structural Approach to Operational Semantics,” DAIMI FN-19, 1981; reprinted 2004。
关系图谱21 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

被这些条目使用