“这一组合解释就是指称语义的必要核心;偏序、底元与不动点并非所有指称模型的定义成分。只有需要解释非终止和递归时,才常选择带底元的DCPO 与 Scott 连续映射作为语义域,并由最小不动点给递…”
形式陈述 ​
设
Kleene 不动点定理给出
且该元素满足
在指称语义中,递归定义或循环先被写成语义泛函
直觉 ​
递归方程常有多个数学解,单凭“把等式两边写成一样”不足以说明程序应该表示哪一个。最小不动点从完全未知的
“最小”说的是信息最少,而非返回数值最小。一个函数在更多输入上终止,通常在函数空间的逐点信息序中更大;最小解保留递归方程强制的终止行为,却把无法由有限展开推出的输入留为未定义。这是选择规范解的原则,不是数值优化。
例子与边界 ​
把部分自然数函数按逐点信息序排列,底元素
其中右侧若调用
不动点不必唯一。恒等映射
Knaster–Tarski 定理在完备格上对单调映射给出不动点格与最小不动点;这里的 Kleene 构造则依赖 pointed DCPO 和保持有向上确界的连续性,才能保证从
推论与应用 ​
while b do c 的指称可写成状态变换泛函的最小不动点:第零近似处处不终止,后续近似依次容纳至多执行有限轮循环后退出的状态,极限汇集所有有限终止运行。递归函数和递归类型方程沿用这种 DCPO 上的有限展开图景;静态分析则从收集语义的具体可达状态集合出发,在完备格或抽象域中求解数据流不动点。两者可以由序理论互相参照,却不是同一个语义对象。
当语义抽象到有限高度的格时,迭代会在有限步稳定;在无限域上可能只在上确界处到达不动点。实现静态分析时若加入 widening 加速收敛,得到的往往是安全的后不动点近似,不再等同于精确最小不动点,这一工程折衷应与本页的精确语义构造区分。
参考资料
- Samson Abramsky and Achim Jung, “Domain Theory,” in Handbook of Logic in Computer Science, Vol. 3, Oxford University Press, 1994,fixed-point properties of continuous maps on domains。
- Glynn Winskel, The Formal Semantics of Programming Languages, MIT Press, 1993,Chs. 5–8,fixed points, recursion, and denotational semantics。