Skip to content

模型Model

指称语义

施工中 · 内容逐步修订

Denotational semantics

把程序构造组合地解释为数学对象与函数的语义方法。

形式陈述 ​

指称语义为每类语法对象指定一个数学语义域,并给出组合的解释函数。变量解释可以用环境 ρ 表示,此时表达式的值写作 [[e]]ρ;闭项、代数语义或其他无自由变量的模型并不需要把环境列为通用组成。组合性要求复合表达式的指称只由其直接子表达式的指称决定。例如

[[e1+e2]]ρ=[[e1]]ρ+[[e2]]ρ.

这一组合解释就是指称语义的必要核心;偏序、底元与不动点并非所有指称模型的定义成分。只有需要解释非终止和递归时,才常选择带底元的DCPO作为语义域,要求语义泛函是Scott 连续映射,再由Kleene 不动点定理和最小不动点语义为递归方程选取规范解。无类型 λ 演算中的不动点组合子是生成 Yf=βf(Yf) 的语法项,不自动选择域中的最小解;两者连接递归方程的不同层面,不能互作定义。其他语言可以把项解释到集合、代数、测度或游戏等数学对象中。

若语义相等蕴含上下文等价,称模型对观察是可靠的;若反方向也成立,两者恰好一致,称为完全抽象。计算充分性通常先连接闭合基类型指称与实际求值:下面的模型可以完整证明这项对应,却仍不是完全抽象的。

直觉

操作语义问程序怎样一步步运行,指称语义问程序作为一个整体“是什么数学对象”。组合性是核心约束:一个大程序的含义应从部件含义拼出,而不必重新观察其内部执行。纯函数可解释为数学函数,命令可解释为状态变换,概率程序可解释为分布变换;递归则由有限展开逐步逼近整体含义。

例子与边界

一个可以完整算出的有限模型 ​

固定语言 L:弱传名 Bool/箭头演算,含条件式与原始发散常量 Ω:Bool。它没有一般递归。取

DBool={⊥,T,F},DA→B={f:DA→DB∣f 单调}.

基类型只有 ⊥≤T、⊥≤F,T,F 不可比。函数序为逐点序,底元 ⊥A→B 是 a↦⊥B。按类型归纳,每个域都有限:基域有三个元素,两个有限集合之间只有有限多个函数。它们也有每个有向集的上确界:有限有向集含一个最大元素,函数域的有向上确界逐点取得并保持单调。因此这里的单调函数自动保持有向上确界,即 Scott 连续;不需要求无限递归方程就能使用这些域。

环境 ρ 给每个 x:A 指派 DA 元素。解释的全部子句为

[[x]]ρ=ρ(x),[[true]]ρ=T,[[false]]ρ=F,[[Ω]]ρ=⊥,[[λx:A.e]]ρ=(a↦[[e]](ρ[x↦a])),[[eu]]ρ=([[e]]ρ)([[u]]ρ),[[if g then e else u]]ρ={[[e]]ρ,[[g]]ρ=T,[[u]]ρ,[[g]]ρ=F,⊥B,[[g]]ρ=⊥,

最后一式的 B 是分支结果类型,可能本身为箭头。条件式只在守卫上严格;没有选择的分支不影响结果。结构归纳验证这些解释关于环境单调:应用中若 f≤f′ 且 a≤a′,则 f(a)≤f′(a)≤f′(a′);条件式的守卫从底提高时,结果从底提高,守卫已为布尔值时则只需所选分支单调。抽象因此确实产生函数域中的元素。

例如常函数 k=λx:Bool.true 与严格函数 s=λx:Bool.if x then true else true 的解释为

输入 a [[k]](a) [[s]](a)
⊥ T ⊥
T T T
F T T

应用子句于是给出 [[kΩ]]=T、[[sΩ]]=⊥,恰对应一次传名返回与严格守卫发散。

组合性怎样覆盖洞在绑定器内部的情形 ​

任意闭合程序上下文 C:A⇒Bool 都诱导数学函数 FC:DA→DBool:把洞换成新变量 z:A,令 FC(d)=[[C[z]]][z↦d]。语义替换引理给出

[[C[e]]]=FC([[e]]).

该式可直接对上下文文法归纳。洞分支为恒等映射;应用与条件式由对应解释子句传递;λ 分支对每个输入 a 在扩展环境中使用归纳假设,再取函数外延相等,所以洞在绑定器内部也被覆盖。填项闭合,故新增绑定不会捕获它的变量。以 C=[ ]Ω 为例,FC(f)=f(⊥)。由一般等式,替换相等指称总给出相等整体指称;再结合基类型充分性,才能得到真实程序观察相同。

对无副作用算术表达式,[[x+1]]ρ=ρ(x)+1。命令 x := x+1 可解释为状态函数 σ↦σ[x↦σ(x)+1]。while b do c 的含义不是有限语法递归可直接给出的,它如何由有限轮展开构成整体状态变换,见最小不动点语义条目。

模型必须与选定的观察匹配。若模型把两个程序解释为同一对象,而某个上下文能通过时间、异常或资源区分它们,语义相等便失去了上下文可靠性。反过来,过细的模型可能区分语言无法观察的实现细节。完全抽象要求两种等价恰好一致;前一种问题破坏从语义相等到上下文等价的方向,后一种问题破坏反方向。

计算充分性的fix扩充在保持Bool/箭头类型域不变时加入显式不动点构造,证明从底开始的语义迭代有限稳定,并补出类型推导的递归分支。基线 L 仍无一般递归;扩充后的语义近似稳定也不等于程序必定终止。

推论与应用

指称语义为程序等价、递归定义和编译优化提供代数化基础。DCPO负责组织信息近似,Scott 连续性保证近似极限与语义构造相容,Kleene 不动点定理证明迭代上确界是最小不动点,最后由最小不动点语义解释循环与递归;结构、映射、定理和应用分别承担不同证明责任。

与操作语义之间的充分性、可靠性证明可检验模型是否准确。静态分析先以收集语义汇总程序点上的全部可达具体状态,再由抽象解释映到较粗但可计算的性质域。该路线通常在完备格上使用单调算子与Knaster–Tarski 定理;递归指称语义则依靠 DCPO 中的有向近似与 Scott 连续性。两边都出现最小不动点,但前提、对象与用途不能互换。

参考资料
  • A. M. Pitts、G. Winskel、M. Fiore、M. Lennon-Bertrand,Denotational Semantics,2024-12-05 版,§6.2–6.3,Definitions 22–25、Theorem 26 与 Remark 13,pp. 48–52。本文取其布尔域与函数域解释,限制到语言 L,并在正文证明这一限制下各类型域有限。
  • Glynn Winskel, The Formal Semantics of Programming Languages, MIT Press, 1993,Chs. 5–8。
  • Dana Scott and Christopher Strachey, Toward a Mathematical Semantics for Computer Languages, Technical Monograph PRG-6, Oxford University Computing Laboratory, 1971,Full monograph, especially §§1–4。
关系图谱19 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

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