Skip to content

指称语义

Denotational semantics

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

条目类型
模型

形式陈述

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

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

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

若语义相等蕴含上下文等价,称模型对观察是可靠的(sound);若上下文等价蕴含语义相等,称之为完备(complete)。两个方向恰好都成立时,该模型才是 fully abstract。adequacy 常只连接终止、数值等某类基本观察,强度也需单独声明。

直觉

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

例子与边界

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

边界是“映射到同一个数学函数”未必自动等于语言中的上下文等价;若语义域忽略时间、异常或资源,而上下文能观察这些差异,语义就不充分。相反,过细的模型可能区分语言无法观察的实现细节。完全抽象要求两种等价恰好一致,是额外而非自动得到的性质。

推论与应用

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

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

参考资料
  • 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。
关系图谱6 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

并列辨析