指称语义学讲义 前言 我们的目的在于介绍domain论和指称语义, 并展示其是如何为推理程序行为提供数学基础的.
推荐书目 Winskel, G. (1993). The Formal Semantics of Programming Languages. MIT Press. 这是一本操作语义和指称语义的极好导论. 就本课程而言, 相关的章节是5, 8, 9, 10 (第1节和第2节), 以及11. [译注: 有中文译本, 名为程序设计语言的形式语义.] Tennent, R. D. (1991). Semantics of Programming Languages. Prentice-Hall. 部分I和II与本讲义有关. 深入阅读 Gunter, C. A. (1992). Semantics of Programming Languages. Structures and Techniques. MIT Press. 这是一本研究生水平的教材, 包含有诸多本讲义未能涵盖的材料. 就讲义本身而言, 相关的章节是第1章, 第2章, 以及第4到6章. Streicher, T. (2006). Domain-Theoretic Foundations of Functional Programming. World Scientific Publishing Co. ISBN 981-270-142-7 一本关于本讲义后半部分所涉及的PCF语言的研究生水平教材. 第1章 引论 幻灯片1提示了给出编程语言的形式语义的几种方法. 操作性方法于Part IB课程Semantics of Programming Languages 中介绍, 而公理性方法在Part II课程Hoare Logic 中刻画. 本课程讲义给出了指称性方法的一些技巧的简要导引. 指称语义学的目的之一在于以尽可能抽象且实现无关的方式描述编程语言的构造: 通过这种方法, 我们有可能获得对于某些概念的洞察, 而这些概念构成了编程语言以及其间关系的基础, 甚至有时还能理解在语言设计中实现这些概念的新方式. 当然, 验证指称性描述可以被实现是重要的. 换言之, 即将指称语义和操作语义联系起来: 我们将在之后刻画如何施行此事.
形式语义的风格
操作的. 程序片段的意义基于程序执行过程中其可以施行的计算步骤 定义.
公理的. 程序片段的意义间接地通过程序性质的某种逻辑的公理和规则 定义.
指称的. 关心给出编程语言的数学模型 . 程序片段的意义抽象地定义为某种适当数学结构的元素.
幻灯片1
指称语义的特征性质
每个程序片段P 被赋予一个指称 ⟦ P ⟧ , 这是一个数学对象, 其代表了P 对于完整程序的意义的贡献. 一个程序片段的意义只由其子片段决定, 或者说指称语义是可复合的 . 幻灯片2
第1.1节 指称语义的基本例子 考虑基本的编程语言IMP− , 其相当于带有控制结构的算术和布尔表达式, 而这里的控制结构是由赋值, 顺序, 条件刻画的, 见幻灯片3.
指称语义的基本例子 (I):
IMP− 的句法
算术表达式: A ∈ Aexp ⩴ n _ | L | A + A | … 其中n 是整数, 而L ∈ 𝕃 , 𝕃 是给定的位置 的集合.
布尔表达式: B ∈ Bexp ⩴ true | false | A = A | ¬ B | …
命令: C ∈ Comm ⩴ skip | L ≔ A | C ; C | if B then C else C
幻灯片3
为了给出一个编程语言的指称语义 , 我们需要赋予每种程序片段的句法范畴以一个解释的domain (domain of interpretation), 然后复合性地描述各种形成程序片段 (phrase-forming) 的构造所对应的语义函数. 对于IMP− , 幻灯片4到10给出了其指称语义, 并且这个语义也很容易在SML中实现.
指称语义的基本例子 (II)
语义函数
A : Aexp → ( State → ℤ ) B : Bexp → ( State → 𝔹 ) C : Comm → ( State ⇀ State ) 其中
ℤ = { … , − 1 , 0 , 1 , … } 𝔹 = { true , false } State = ( 𝕃 → ℤ ) 幻灯片4
指称语义的基本例子 (III)
语义函数A
A ⁡ ⟦ n _ ⟧ = λ s ∈ State . n A ⁡ ⟦ L ⟧ = λ s ∈ State . s ⁡ ( L ) A ⁡ ⟦ A 1 + A 2 ⟧ = λ s ∈ State . A ⁡ ⟦ A 1 ⟧ ⁡ ( s ) + A ⁡ ⟦ A 2 ⟧ ⁡ ( s ) 幻灯片5
指称语义的基本例子 (IV)
语义函数B
B ⁡ ⟦ true ⟧ = λ s ∈ State . true B ⁡ ⟦ false ⟧ = λ s ∈ State . false B ⁡ ⟦ A 1 = A 2 ⟧ = λ s ∈ State . eq ⁡ ( A ⁡ ⟦ A 1 ⟧ ⁡ ( s ) , A ⁡ ⟦ A 2 ⟧ ⁡ ( s ) ) 其中 eq ⁡ ( a , a ′ ) = { true , 如果 a = a ′ false , 如果 a ≠ a ′ B ⁡ ⟦ ¬ B ⟧ = λ s ∈ State . ¬ ( B ⁡ ⟦ B ⟧ ⁡ ( s ) ) 幻灯片6
指称语义的基本例子 (V)
语义函数C
⟦ skip ⟧ = λ s ∈ State . s 注记: 从现在开始, 语义函数的名字都将省略.
幻灯片7
可复合性一例
给定部分函数⟦ C ⟧ , ⟦ C ′ ⟧ : State ⇀ State 以及函数⟦ B ⟧ : State → { true , false } , 我们可以定义⟦ if B then C else C ′ ⟧ = λ s ∈ State . if ⁡ ( ⟦ B ⟧ ⁡ ( s ) , ⟦ C ⟧ ⁡ ( s ) , ⟦ C ′ ⟧ ⁡ ( s ) ) 其中if ⁡ ( b , x , x ′ ) = { x , 如果 b = true x ′ , 如果 b = false
幻灯片8
指称语义的基本例子 (VI)
语义函数C
⟦ L ≔ A ⟧ = λ s ∈ State . λ l ∈ 𝕃 . if ⁡ ( l = L , ⟦ A ⟧ ⁡ ( s ) , s ⁡ ( l ) ) 幻灯片9
顺序复合的指称语义
两个命令的顺序复合C ; C ′ 的指称为⟦ C ; C ′ ⟧ = ⟦ C ′ ⟧ ∘ ⟦ C ⟧ = λ s ∈ State . ⟦ C ′ ⟧ ⁡ ( ⟦ C ⟧ ⁡ ( s ) ) 这实际上就是命令的指称 (即部分函数⟦ C ⟧ , ⟦ C ′ ⟧ : State ⇀ State ) 的复合而已.
与之相对的是, 顺序复合的操作语义为C , s ⇓ s ′ C ′ , s ′ ⇓ s ″ C ; C ′ , s ⇓ s ″
幻灯片10
第1.2节 例子: 作为不动点的while 循环 幻灯片2所提及的可复合性 的要求是相当tough的. 我们用以赋予程序片段指称的数学对象必须足够丰富, 因为需要支持建模所讨论编程语言的一切形成程序片段的构造. 某些形成程序片段的构造是容易处理的, 而其他一些可能就不那么容易了. 例如, 牵涉状态改变命令的条件表达式 [译注: 更准确地说, 应该是条件命令] 可以基于应用相应的分支函数于立即子表达式的指称给出其指称语义: 见幻灯片8. 类似地, 命令的顺序复合的指称语义可由从状态到状态的部分函数的复合操作得到, 如幻灯片10.
现在我们来考虑基本编程语言IMP的指称语义, 其扩展了IMP− 以while 循环:C ∈ Comm ⩴ … | while B do C 然而, 这种循环构造并不容易以可复合的方式解释!
while 循环的转换语义为〈 while B do C , s 〉 → 〈 if B then C ; ( while B do C ) else skip , s 〉 这暗示了其作为从状态到状态的部分函数的指称应该满足⟦ while B do C ⟧ = ⟦ if B then C ; ( while B do C ) else skip ⟧ 我们应该注意到这不能直接用来定义⟦ while B do C ⟧ , 因为右边恰恰包含有一个我们想要定义其指称的子片段. 使用顺序复合和if 的指称语义, 以及skip 的指称为恒等函数λ s ∈ State . s 的事实, 上面这条等式是在说⟦ while B do C ⟧ 应该是幻灯片11中给出的不动点方程 的一个解.
⟦ while B do C ⟧ 的不动点性质
⟦ while B do C ⟧ = f ⟦ B ⟧ , ⟦ C ⟧ ⁡ ( ⟦ while B do C ⟧ ) 其中, 对于每个
b : State → { true , false } 和
c : State ⇀ State , 我们定义
f b , c : ( State ⇀ State ) → ( State ⇀ State ) 为
f b , c = λ w ∈ ( State ⇀ State ) . λ s ∈ State . if ⁡ ( b ⁡ ( s ) , w ⁡ ( c ⁡ ( s ) ) , s ) 为什么w = f ⟦ B ⟧ , ⟦ C ⟧ ⁡ ( w ) 有解? 若此方程具有多解, 那么选取哪一个作为⟦ while B do C ⟧ 呢? 幻灯片11
在赋予带有递归特性的编程语言以指称语义时, 这样的不动点方程经常出现. 自Dana Scott于60年代晚期的先驱性研究始, 一种被称为domain论 的数学理论建立起来以提供一种背景环境, 其中我们不仅总是可以找到因指称语义而生的不动点方程的解, 而且还能选出在某种适切意义下最小的解, 而这实际上保证了指称语义和操作语义之间的协调配合. 关键的想法在于考虑用作指称的数学对象之间的一种偏序, 此偏序表达了这样的事实, 一个对象由另一个对象近似 , 或者说比另一个对象携带了更多的信息 , 或者说比另一个对象更加良定 . 然后, 不动点方程的最小解可以被构造为对于解的近似升链的极限. 在下一章里, 这些想法将会变得从数学角度来说更加精确和一般, 但是目前先让我们具体地阐明该如何运用此想法解决幻灯片11中的特定问题.
为了确定起见, 让我们考虑以下特定的while 循环while X > 0 do ( Y ≔ X ⁎ Y ; X ≔ X − 1 ) 其中X 和Y 是两个不同的整数存储位置 (变量), 而位置的集合𝕃 = { X , Y } .
在这种情形之下, 我们可以就取状态为赋值[ X ↦ x , Y ↦ y ] , 其中x , y ∈ ℤ , 这记录了位置X 和Y 的当前内容. 因此, State = ( 𝕃 → ℤ ) .
我们正在试着将这个while 循环的指称定义为一个部分函数w : State ⇀ State 其应该是幻灯片11上的不动点方程w = f ⟦ X > 0 ⟧ , ⟦ Y ≔ X ⁎ Y ; X ≔ X − 1 ⟧ ⁡ ( w ) 的一个解.
对于特定的布尔表达式B = ( X > 0 ) 和命令C = ( Y ≔ X ⁎ Y ; X ≔ X − 1 ) , 函数f ⟦ B ⟧ , ⟦ C ⟧ 恰好与幻灯片12上定义的函数f 相同.
⟦ while X > 0 do ( Y ≔ X ⁎ Y ; X ≔ X − 1 ) ⟧
令
State = def ( 𝕃 → ℤ ) D = def ( State ⇀ State ) 对于
⟦ while X > 0 do ( Y ≔ X ⁎ Y ; X ≔ X − 1 ) ⟧ ∈ D , 我们寻求
w = f ⁡ ( w ) 的一个最小的解, 其中
f : D → D 被定义为
f ⁡ ( w ) ⁡ ( [ X ↦ x , Y ↦ y ] ) = { [ X ↦ x , Y ↦ y ] , 如果 x ≤ 0 w ⁡ ( [ X ↦ x − 1 , Y ↦ x ⁎ y ] ) , 如果 x > 0 幻灯片12
D 上的偏序
D 上的偏序⊑ :w ⊑ w ′ 当且仅当对于每个s ∈ State , 如果w 在s 上有定义, 那么w ′ 也在s 上有定义, 并且w ⁡ ( s ) = w ′ ⁡ ( s ) . 另外一种描述是, w 的图包含于w ′ 的图.最小元⊥ ∈ D w.r.t. ⊑ :⊥ 即全然未定义的部分函数, 或者说图为空的部分函数, 其满足对于每个w ∈ D , ⊥ ⊑ w . 幻灯片13
考虑幻灯片13上给出的D = ( State ⇀ State ) 的元素之间的偏序⊑ . 注意到⊑ 实际上就是前文所提及的"信息序"的具体化身: 如果w ⊑ w ′ , 那么w ′ 在w 有定义的地方都保持和w 的一致, 但是它可能在其他一些参数上也有定义. 我们还应该注意到的是, D 包含一个相对于此偏序的最小元: 对于全然未定义的部分函数, 我们将其记作⊥ , 它满足对于任意的w ∈ D 都有⊥ ⊑ w .
自⊥ 开始, 我们反复应用函数f 以构造一个部分函数的序列w 0 , w 1 , w 2 , … :w 0 = def ⊥ ; w n + 1 = def f ⁡ ( w n ) . 使用幻灯片12上的f 的定义, 我们发现w 1 ⁡ [ X ↦ x , Y ↦ y ] = f ⁡ ( ⊥ ) ⁡ [ X ↦ x , Y ↦ y ] = { [ X ↦ x , Y ↦ y ] , 如果 x ≤ 0 undefined , 如果 x ≥ 1 w 2 ⁡ [ X ↦ x , Y ↦ y ] = f ⁡ ( w 1 ) ⁡ [ X ↦ x , Y ↦ y ] = { [ X ↦ x , Y ↦ y ] , 如果 x ≤ 0 [ X ↦ 0 , Y ↦ y ] , 如果 x = 1 undefined , 如果 x ≥ 2 w 3 ⁡ [ X ↦ x , Y ↦ y ] = f ⁡ ( w 2 ) ⁡ [ X ↦ x , Y ↦ y ] = { [ X ↦ x , Y ↦ y ] , 如果 x ≤ 0 [ X ↦ 0 , Y ↦ y ] , 如果 x = 1 [ X ↦ 0 , Y ↦ 2 ⁎ y ] , 如果 x = 2 undefined , 如果 x ≥ 3 w 4 ⁡ [ X ↦ x , Y ↦ y ] = f ⁡ ( w 3 ) ⁡ [ X ↦ x , Y ↦ y ] = { [ X ↦ x , Y ↦ y ] , 如果 x ≤ 0 [ X ↦ 0 , Y ↦ y ] , 如果 x = 1 [ X ↦ 0 , Y ↦ 2 ⁎ y ] , 如果 x = 2 [ X ↦ 0 , Y ↦ 6 ⁎ y ] , 如果 x = 3 undefined , 如果 x ≥ 4 并且, 在n ≥ 1 的一般情况下, 我们有w n ⁡ [ X ↦ x , Y ↦ y ] = { [ X ↦ x , Y ↦ y ] , 如果 x ≤ 0 [ X ↦ 0 , Y ↦ ( ! x ) ⁎ y ] , 如果 0 < x < n undefined , 如果 x ≥ n 其中! x 是x 的阶乘.
因此, 我们得到了一个部分函数的递增序列w 0 ⊑ w 1 ⊑ w 2 ⊑ … ⊑ w n ⊑ … 所有这些部分函数之并是元素w ∞ ∈ D , 其为w ∞ ⁡ [ X ↦ x , Y ↦ y ] = { [ X ↦ x , Y ↦ y ] , 如果 x ≤ 0 [ X ↦ 0 , Y ↦ ( ! x ) ⁎ y ] , 如果 x > 0 注意到w ∞ 是f 的一个不动点, 因为对于每个[ X ↦ x , Y ↦ y ] , 我们有f ⁡ ( w ∞ ) ⁡ [ X ↦ x , Y ↦ y ] = { [ X ↦ x , Y ↦ y ] , 如果 x ≤ 0 w ∞ ⁡ [ X ↦ x − 1 , Y ↦ x ⁎ y ] , 如果 x > 0 (根据 f 的定义) = { [ X ↦ x , Y ↦ y ] , 如果 x ≤ 0 [ X ↦ 0 , Y ↦ 1 ⁎ y ] , 如果 x = 1 [ X ↦ 0 , Y ↦ ! ( x − 1 ) ⁎ x ⁎ y ] , 如果 x > 1 (根据 w ∞ 的定义) = w ∞ ⁡ [ X ↦ x , Y ↦ y ] 实际上, 我们可以表明w ∞ 是f 的最小 不动点, 意即对于任意的w ∈ D , 有w = f ⁡ ( w ) ⇒ w ∞ ⊑ w . 我们取这个最小不动点w ∞ 作为while X > 0 do ( Y ≔ X ⁎ Y ; X ≔ X − 1 ) 的指称, 其构造方式是下一章要证明的Tarski不动点定理的一个实例. 我们也应该注意到, w ∞ 的确就是命令while X > 0 do ( Y ≔ X ⁎ Y ; X ≔ X − 1 ) 的结构操作语义所给出的从状态到状态的函数, 见Part IB课程Semantics of Programming Languages .
第1.3节 练习 练习1. 在SML中实现IMP− 的指称语义.
练习2. 考虑幻灯片11上定义的函数
f b , c : ( State ⇀ State ) → ( State ⇀ State ) 根据n 上的归纳证明f b , c n ⁡ ( ⊥ ) = λ s ∈ State . { c k ⁡ ( s ) , 如果存在 0 ≤ k < n 满足对于每个 0 ≤ i < k 有 b ⁡ ( c i ⁡ ( s ) ) = true 而 b ⁡ ( c k ⁡ ( s ) ) = false undefined , 如果对于每个 0 ≤ i < n 有 b ⁡ ( c i ⁡ ( s ) ) = true 令w b , c : State ⇀ State 是由w b , c = def λ s ∈ State . { c k ⁡ ( s ) , 如果存在 k ≥ 0 满足对于每个 0 ≤ i < k 有 b ⁡ ( c i ⁡ ( s ) ) = true 而 b ⁡ ( c k ⁡ ( s ) ) = false undefined , 如果对于每个 i ≥ 0 有 b ⁡ ( c i ⁡ ( s ) ) = true 定义的部分函数, 证明w b , c 满足不动点方程w b , c = f b , c ⁡ ( w b , c ) . 对于b = ⟦ true ⟧ = λ s ∈ State . true 和c = ⟦ skip ⟧ = λ s ∈ State . s , 描述函数f b , c . 什么样的从状态到状态的部分函数是f b , c 的不动点呢? 相对于⊑ 的最小不动点是什么呢? 这个最小不动点和while true do skip 的操作语义所确定的从状态到状态的部分函数是一致的吗? 练习3. 说明幻灯片13上的关系⊑ 的确是一个偏序, 而且⊥ 是最小元.
练习4. 证明w ∞ 的确是f 的最小不动点. 更一般地, 根据幻灯片13和练习2的定义, 证明对于任意的w ∈ ( State ⇀ State ) , 有w = f b , c ⁡ ( w ) ⇒ w b , c ⊑ w .
第2章 最小不动点 本章介绍了被称为domain论 的数学理论, 其为构造各种编程语言特性的指称语义中所用到的最小不动点提供了一个一般性的框架. 该理论是由Dana Scott提出的.
第2.1节 偏序集和单调函数 论点
所有计算的domain都是带有最小元的偏序集. 所有可计算函数都是单调的. 幻灯片14
第2.1.1小节 偏序集 domain论使用满足特定完备性质的偏序集. 我们在幻灯片15中回顾了偏序 的定义. D 被称为偏序集( D , ⊑ ) 的基础集(underlying set) . 大部分时候, 我们只以基础集的名字引用偏序集, 而以相同的符号⊑ 代表不同偏序集的偏序.
偏序集
集合
D 上的二元关系
⊑ 是一个偏序, 当且仅当它是
自反的: ∀ d ∈ D . d ⊑ d ; 传递的: ∀ d , d ′ , d ″ ∈ D . d ⊑ d ′ ⊑ d ″ ⇒ d ⊑ d ″ ; 反对称的: ∀ d , d ′ ∈ D . d ⊑ d ′ ⊑ d ⇒ d = d ′ . 序对
( D , ⊑ ) 被称为一个
偏序集 .
幻灯片15
偏序集公理: 规则形式
x ⊑ x x ⊑ y y ⊑ z x ⊑ z x ⊑ y y ⊑ x x = y 幻灯片16
部分函数的domain, X ⇀ Y
基础集: 由所有定义域dom ⁡ ( f ) ⊆ X 且取值于Y 的部分函数f 构成. 偏序: f ⊑ g 当且仅当dom ⁡ ( f ) ⊆ dom ⁡ ( g ) 且∀ x ∈ dom ⁡ ( f ) . f ⁡ ( x ) = g ⁡ ( x ) , 或者说graph ⁡ ( f ) ⊆ graph ⁡ ( g ) . 幻灯片17
例子1. 从集合X 到集合Y 的所有部分函数构成的集合( X ⇀ Y ) 可以看成是一个偏序集, 如幻灯片17那样. 前一章里, 我们取这个domain在X = Y = State (某个状态集合) 情形下的实例作为命令的指称集.
第2.1.2小节 单调函数 幻灯片18中给出了偏序集之间的单调映射的概念.
单调性
两个偏序集之间的函数
f : D → E 是
单调的 , 如果
∀ d , d ′ ∈ D . d ⊑ d ′ ⇒ f ⁡ ( d ) ⊑ f ⁡ ( d ′ ) . x ⊑ y f ⁡ ( x ) ⊑ f ⁡ ( y ) ( f 单调) 幻灯片18
例子2. 给定偏序集D 和E , 显然常函数λ d ∈ D . e : D → E 是单调的.
例子3. 当D 是部分函数的domain ( State ⇀ State ) (见幻灯片17) 时, 幻灯片11上定义的与while 循环的指称语义有关的函数f b , c : D → D 是一个单调函数. 我们将其验证留作练习.
第2.2节 最小元和前不动点 (pre-fixed point) 定义1. 设D 是一个偏序集, S 是D 的一个子集, d ∈ S 被称为S 的最小 元, 如果其满足∀ x ∈ S . d ⊑ x .
注意到因为⊑ 是反对称的, 所以S 至多拥有一个最小元. 我们也应该注意到, 有的偏序集是没有最小元的. 例如, 带有通常偏序的ℤ .
函数f : D → D 的一个不动点 , 根据定义, 是满足f ⁡ ( d ) = d 的一个元素d ∈ D . 如果D 是一个偏序集, 我们可以考虑一个更弱的概念, 即前不动点 , 见幻灯片19.
前不动点
令
D 是一个偏序集而
f : D → D 是一个函数.
一个元素
d ∈ D 是
f 的一个
前不动点 , 如果其满足
f ⁡ ( d ) ⊑ d .
f 的
最小前不动点 , 如果存在的话, 记作
fix ⁡ ( f ) . 因此, 最小前不动点由以下两条性质(唯一地)刻画:
(lpf1): f ⁡ ( fix ⁡ ( f ) ) ⊑ fix ⁡ ( f ) ; (lpf2): ∀ d ∈ D . f ⁡ ( d ) ⊑ d ⇒ fix ⁡ ( f ) ⊑ d . 幻灯片19
证明原理
f ⁡ ( fix ⁡ ( f ) ) ⊑ fix ⁡ ( f ) 令D 是一个偏序集, f : D → D 是一个带有最小前不动点fix ⁡ ( f ) ∈ D 的函数. 对于任意的x ∈ D , 为了证明fix ⁡ ( f ) ⊑ x , 只需要证明f ⁡ ( x ) ⊑ x .f ⁡ ( x ) ⊑ x fix ⁡ ( f ) ⊑ x 幻灯片20
命题2. 设D 是一个偏序集而f : D → D 是一个带有最小前不动点fix ⁡ ( f ) 的函数. 只要f 是单调的, 那么fix ⁡ ( f ) 实际上就是f 的一个不动点, 因此也是f 的最小不动点.
证明. 因为
fix ⁡ ( f ) 是
f 的前不动点, 所以
f ⁡ ( fix ⁡ ( f ) ) ⊑ fix ⁡ ( f ) . 如果
f 是单调的, 那么
f ⁡ ( f ⁡ ( fix ⁡ ( f ) ) ) ⊑ f ⁡ ( fix ⁡ ( f ) ) . 换言之,
f ⁡ ( fix ⁡ ( f ) ) 也是
f 的一个前不动点. 但是, 鉴于
fix ⁡ ( f ) 是最小的前不动点, 我们可以推出
fix ⁡ ( f ) ⊑ f ⁡ ( fix ⁡ ( f ) ) . 根据偏序的反对称性, 我们可以断言
fix ⁡ ( f ) = f ⁡ ( fix ⁡ ( f ) ) 即
fix ⁡ ( f ) 是
f 的一个不动点. 而且, 考虑到偏序的自反性, 不动点也是前不动点. 对于任意的
d ∈ D 满足
d = f ⁡ ( d ) , 我们有
fix ⁡ ( f ) ⊑ d . 换言之,
fix ⁡ ( f ) 是
f 的最小不动点.
◻
第2.3节 完全偏序 (cpo) 和连续函数 论点*
所有计算的domain都是带有最小元的完全偏序. 所有可计算函数都是连续的. 幻灯片21
第2.3.1小节 domain 定义1. 若存在, 我们将偏序集D 的最小元记为⊥ D . 若D 在上下文中是已知的, 写成⊥ 就可以了. 因此, ⊥ 由性质∀ d ∈ D . ⊥ ⊑ d 唯一确定. 偏序集的最小元有时也被称为其底(bottom) 元素. 偏序集D 中的一个可数的升链 是由D 的元素构成的一个序列满足d 0 ⊑ d 1 ⊑ d 2 ⊑ … 这样的链的一个上界 是任意满足∀ n ∈ ℕ . d n ⊑ d 的d ∈ D . 若链的最小上界(lub) 存在, 我们将其记为⨆ n ≥ 0 d n . 因此, 根据定义:∀ m ∈ ℕ . d m ⊑ ⨆ n ≥ 0 d n .对于任意的d ∈ D , 如果∀ m ∈ ℕ . d m ⊑ d , 那么⨆ n ≥ 0 d n ⊑ d . cpo和domain
一个
链完备偏序集(chain-complete poset) , 或者说缩写为
cpo , 是一个偏序集
( D , ⊑ ) 满足其中的每个链
d 0 ⊑ d 1 ⊑ d 2 ⊑ … 都具有最小上界
⨆ n ≥ 0 d n :
(lub1): ∀ m ≥ 0 . d m ⊑ ⨆ n ≥ 0 d n ; (lub2): ∀ d ∈ D . ( ∀ m ≥ 0 . d m ⊑ d ) ⇒ ⨆ n ≥ 0 d n ⊑ d . 一个
domain 是一个带有最小元
⊥ 的cpo:
∀ d ∈ D . ⊥ ⊑ d . 幻灯片22
最小元和最小上界的定义: 规则形式
⊥ ⊑ x x i ⊑ ⨆ n ≥ 0 x n ( i ≥ 0 而 〈 x n 〉 是一个链) ∀ m ≥ 0 . x m ⊑ x ⨆ n ≥ 0 x n ⊑ x ( 〈 x n 〉 是一个链) 幻灯片23
本讲义里我们关心的是具有特定完备性质的偏序集, 见幻灯片22. 读者应该注意的是, 在有关的指称语义的文献中, 术语"domain"的含义是相当宽泛的: 存在各种各样的domain, 它们可能具有各种各样的序论性质, 而不仅仅是满足链完备性质和拥有最小元.
例子3. 从集合X 到集合Y 的所有部分函数的集合( X ⇀ Y ) 上可以赋予一个偏序成为domain, 见幻灯片24. 在第1.2节, 我们使用了X = Y = State 的特殊情形作为命令的指称集. 我们应该注意到, 声称是链f 0 ⊑ f 1 ⊑ f 2 ⊑ … 的最小上界的f 的确是一个良定的部分函数, 因为在有定义的地方, 每个f n 的值都是一致的. 至于验证f 的确是偏序集( X ⇀ Y , ⊑ ) 中的f 0 ⊑ f 1 ⊑ f 2 ⊑ … 的最小上界, 我们将其留给读者作为练习.
部分函数的domain, X ⇀ Y
基础集: 由所有满足以下条件的部分函数
f 构成, 其定义域
dom ⁡ ( f ) ⊆ X 而取值于
Y .
偏序: f ⊑ g 当且仅当
dom ⁡ ( f ) ⊆ dom ⁡ ( g ) 且
∀ x ∈ dom ⁡ ( f ) . f ⁡ ( x ) = g ⁡ ( x ) , 或者说
graph ⁡ ( f ) ⊆ graph ⁡ ( g ) .
链的最小上界: 链
f 0 ⊑ f 1 ⊑ f 2 ⊑ … 的最小上界是部分函数
f , 其
dom ⁡ ( f ) = ⋃ n ≥ 0 dom ⁡ ( f n ) 而
f ⁡ ( x ) = { f n ⁡ ( x ) , 如果存在某个 n ∈ ℕ 使得 x ∈ dom ⁡ ( f n ) undefined , 否则的话 最小元素: ⊥ 是全然未定义的部分函数.
幻灯片24
例子4. 对于任意的偏序集
( D , ⊑ ) 而言, 如果
D 是有限的, 那么该偏序集是一个cpo. 这是因为, 在这样的偏序集中, 任何链都将终至恒常, 因而拥有最小上界. 当然, 有限的偏序集也不一定拥有最小元, 即不是一个domain. 例如, 考虑以下Hasse图所描述的偏序集.
一个偏序集的
Hasse图 是一个有向图, 其顶点是偏序集的基础集的元素, 而从顶点
x 到顶点
y 有一条边当且仅当
x ≠ y 且
∀ z . ( x ⊑ z & z ⊑ y ) ⇒ ( z = x ∨ z = y ) .
"扁平自然数集"ℕ ⊥ : 0 1 2 ⋯ n n + 1 ⋯ ⊥ "垂直自然数集"Ω : ω n + 1 n 2 1 0 ⋮ ⋮ 图1
图1展示两个非常简单但却无限的domain, 而以下是两个并非cpo的偏序集的例子.
例子5. 装备有通常偏序≤ 的自然数集ℕ = { 0 , 1 , 2 , … } 不是一个cpo, 因为链0 ≤ 1 ≤ 2 ≤ … 在ℕ 中没有上界.
例子6. 考虑上图的第二个例子的一种修改版本, 其中我们为ℕ 添加了两个不同的上界ω 1 ≠ ω 2 . 换言之, 我们考虑的是D = def ℕ ∪ { ω 1 , ω 2 } , 而其上的偏序⊑ 为d ⊑ d ′ ⇔ def { d ≤ d ′ , 如果 d , d ′ ∈ ℕ d ∈ ℕ ∨ d = d ′ , 如果 d ′ ∈ { ω 1 , ω 2 } 然后, D 中的链0 ⊑ 1 ⊑ 2 ⊑ … 拥有两个上界, 即ω 1 和ω 2 , 但是没有最小的上界, 因为ω 1 和ω 2 不可比较. 因此, ( D , ⊑ ) 不是一个cpo.
链的最小上界的一些性质
设
D 是一个cpo.
对于任意的d ∈ D , ⨆ n ≥ 0 d = d . 对于D 中的每个链d 0 ⊑ d 1 ⊑ … ⊑ d n ⊑ … , 我们有⨆ n ≥ 0 d n = ⨆ n ≥ 0 d N + n 对于任意的N ∈ ℕ 成立. 幻灯片25
链的最小上界的一些性质 (续)
对于D 中的两条链d 0 ⊑ d 1 ⊑ … ⊑ d n ⊑ … 和e 0 ⊑ e 1 ⊑ … ⊑ e n ⊑ … , 如果对于每个n ∈ ℕ 有d n ⊑ e n , 那么⨆ n ≥ 0 d n ⊑ ⨆ n ≥ 0 e n . ∀ n ∈ 0 . x n ⊑ y n ⨆ n ≥ 0 x n ⊑ ⨆ n ≥ 0 y n ( 〈 x n 〉 和 〈 y n 〉 俱是链) 幻灯片26
双链的对角化
引理. 令D 是一个cpo, 设双下标索引的元素d m , n ∈ D (其中m , n ≥ 0 ) 构成的族满足m ≤ m ′ & n ≤ n ′ ⇒ d m , n ⊑ d m ′ , n ′ 那么我们有⨆ n ≥ 0 d 0 , n ⊑ ⨆ n ≥ 0 d 1 , n ⊑ ⨆ n ≥ 0 d 2 , n ⊑ … 以及⨆ m ≥ 0 d m , 0 ⊑ ⨆ m ≥ 0 d m , 1 ⊑ ⨆ m ≥ 0 d m , 2 ⊑ … 而且⨆ m ≥ 0 ( ⨆ n ≥ 0 d m , n ) = ⨆ k ≥ 0 d k , k = ⨆ n ≥ 0 ( ⨆ m ≥ 0 d m , n ) .
幻灯片27
证明. 我们利用了定义链的最小上界的性质, 即幻灯片22上的(lub1)和(lub2). 首先, 注意到如果
m ≤ m ′ , 那么
d m , n ⊑ d m ′ , n ⊑ ⨆ n ′ ≥ 0 d m ′ , n ′ 对于每个
n ≥ 0 成立. 因此,
⨆ n ≥ 0 d m , n ⊑ ⨆ n ′ ≥ 0 d m ′ , n ′ . 于是, 我们的确可以得到一条由最小上界构成的链
⨆ n ≥ 0 d 0 , n ⊑ ⨆ n ≥ 0 d 1 , n ⊑ ⨆ n ≥ 0 d 2 , n ⊑ … 并且我们可以构造其最小上界
⨆ m ≥ 0 ⨆ n ≥ 0 d m , n . 运用两次(lub1), 我们有
d k , k ⊑ ⨆ n ≥ 0 d k , n ⊑ ⨆ m ≥ 0 ⨆ n ≥ 0 d m , n 对于每个
k ≥ 0 成立, 那么根据(lub2)可以得到
⨆ k ≥ 0 d k , k ⊑ ⨆ m ≥ 0 ⨆ n ≥ 0 d m , n 反过来, 对于每个
m , n ≥ 0 , 我们注意到
d m , n ⊑ d max ⁡ ( m , n ) , max ⁡ ( m , n ) ⊑ ⨆ k ≥ 0 d k , k 因而再应用两次(lub2)就可以推出
⨆ m ≥ 0 ⨆ n ≥ 0 d m , n ⊑ ⨆ k ≥ 0 d k , k 根据
⊑ 的反对称性, 我们就得出了想要的等式. 剩余的结果也可按照相同的论证手法得到, 只需要交换
m 和
n 的角色.
◻
第2.3.2小节 连续函数 连续性和严格性
如果D 和E 是cpo, 函数f 是连续的 当且仅当f 是单调的;f 保持链的最小上界, 即对于D 中的每条链d 0 ⊑ d 1 ⊑ … , 我们有f ⁡ ( ⨆ n ≥ 0 d n ) = ⨆ n ≥ 0 f ⁡ ( d n ) . 如果D 和E 都拥有最小元, 那么称函数f 是严格的 , 如果f ⁡ ( ⊥ ) = ⊥ . 幻灯片28
例子8. 给定cpo D 和E , 对于每个e ∈ E 而言, 常函数λ d ∈ D . e : D → E 是连续的.
例子9. 当D 是部分函数的domain ( State ⇀ State ) 时 (见幻灯片24), 定义于幻灯片11的与while 循环的指称语义有关的函数f b , c : D → D 是一个连续函数. 我们将其验证留作练习.
例子10. 令Ω 是垂直自然数的domain, 那么由f ⁡ ( x ) = { 0 , 如果 x ∈ ℕ ω , 如果 x = ω 定义的函数f : Ω → Ω 既是单调的也是严格的, 但是并非连续, 因为f ⁡ ( ⨆ n ≥ 0 n ) = f ⁡ ( ω ) = ω 然而⨆ n ≥ 0 f ⁡ ( n ) = ⨆ n ≥ 0 0 = 0
第2.4节 Tarski不动点定理 Tarski不动点定理
令
f : D → D 是domain
D 上的一个连续函数, 那么
f 具有最小前不动点, 由fix ⁡ ( f ) = ⨆ n ≥ 0 f n ⁡ ( ⊥ ) 给出.于是, fix ⁡ ( f ) 也是f 的不动点, 因而是f 的最小不动点 . 幻灯片29
幻灯片29给出了关于domain上的连续函数的关键结果, 其允许我们赋予牵涉递归特性的程序以指称语义. 幻灯片上所用的记号f n ⁡ ( ⊥ ) 是递归定义的:f 0 ⁡ ( ⊥ ) = def ⊥ ; f n + 1 ⁡ ( ⊥ ) = def f ⁡ ( f n ⁡ ( ⊥ ) ) . 注意到既然∀ d ∈ D . ⊥ ⊑ d , 我们有f 0 ⁡ ( ⊥ ) = ⊥ ⊑ f 1 ⁡ ( ⊥ ) ; 而根据单调性, 又可以推出f n ⁡ ( ⊥ ) ⊑ f n + 1 ⁡ ( ⊥ ) ⇒ f n + 1 ⁡ ( ⊥ ) = f ⁡ ( f n ⁡ ( ⊥ ) ) ⊑ f ⁡ ( f n + 1 ⁡ ( ⊥ ) ) = f n + 2 ⁡ ( ⊥ ) . 因此, 通过对于n ∈ ℕ 进行归纳, 我们可以得到∀ n ∈ ℕ . f n ⁡ ( ⊥ ) ⊑ f n + 1 ⁡ ( ⊥ ) . 换言之, 元素f n ⁡ ( ⊥ ) 构成了D 中的一条链. 所以说, 既然D 是cpo, 那么幻灯片29上用到的⨆ n ≥ 0 f n ⁡ ( ⊥ ) 的确是有意义的.
证明. 首先我们注意到
f ⁡ ( fix ⁡ ( f ) ) = f ⁡ ( ⨆ n ≥ 0 f n ⁡ ( ⊥ ) ) = ⨆ n ≥ 0 f ⁡ ( f n ⁡ ( ⊥ ) ) 根据 f 的连续性 = ⨆ n ≥ 0 f n + 1 ⁡ ( ⊥ ) 根据函数的幂次的定义 = ⨆ n ≥ 0 f n ⁡ ( ⊥ ) 根据第2.3节的评注2 = fix ⁡ ( f ) 因此,
fix ⁡ ( f ) 的确是
f 的一个不动点, 当然也就满足幻灯片19上的条件(lpf1). 为了验证(lpf2), 即前不动点的最小性, 我们设
d ∈ D 满足
f ⁡ ( d ) ⊑ d , 那么既然
⊥ 在
D 是最小的, 可以得到
f 0 ⁡ ( ⊥ ) = ⊥ ⊑ d 并且
f n ⁡ ( ⊥ ) ⊑ d ⇒ f n + 1 ⁡ ( ⊥ ) = f ⁡ ( f n ⁡ ( ⊥ ) ) ⊑ f ⁡ ( d ) ⊑ d 根据归纳, 我们可以推出
∀ n ∈ ℕ . f n ⁡ ( ⊥ ) ⊑ d . 换言之,
d 是链的一个上界, 所以它大于等于最小上界, 即
fix ⁡ ( f ) = ⨆ n ≥ 0 f n ⁡ ( ⊥ ) ⊑ d 这就是我们想要的(lpf2)了.
◻
例子1. 定义于幻灯片11上的函数f ⟦ B ⟧ , ⟦ C ⟧ 是domain ( State ⇀ State ) 上的一个连续函数, 因而我们可以应用Tarski不动点定理, 将⟦ while B do C ⟧ 定义为fix ⁡ ( f ⟦ B ⟧ , ⟦ C ⟧ ) . 实际上, 第1.2节中我们构造部分函数w ∞ 的方法不过就是不动点定理的一个实例而已.
⟦ while B do C ⟧
⟦ while B do C ⟧ = fix ⁡ ( f ⟦ B ⟧ , ⟦ C ⟧ ) = ⨆ n ≥ 0 f ⟦ B ⟧ , ⟦ C ⟧ n ⁡ ( ⊥ ) = λ s ∈ State . { ⟦ C ⟧ k ⁡ ( s ) , 如果存在 k ≥ 0 满足对于每个 0 ≤ i < k 有 ⟦ B ⟧ ⁡ ( ⟦ C ⟧ i ⁡ ( s ) ) = true 而 ⟦ B ⟧ ⁡ ( ⟦ C ⟧ k ⁡ ( s ) ) = false undefined , 如果对于每个 i ≥ 0 有 ⟦ B ⟧ ⁡ ( ⟦ C ⟧ i ⁡ ( s ) ) = true 幻灯片30
第2.5节 练习 练习1. 验证幻灯片24上的断言.
练习2. 证明幻灯片25和27中的声明.
练习3. 验证例子9中f b , c 是连续函数的断言. 何时f b , c 是严格的?
第3章 domain上的构造 本节我们将给出诸多构造domain和连续函数的方式, 实际上专注于PCF编程语言的指称语义所需的构造, PCF是本讲义的后半部分的研究对象. 注意到为了描述一个cpo, 我们必须先定义 一个装备有某二元关系的集合, 然后证明
这个关系是一个偏序; 对于这个偏序集中所有的链, 其最小上界存在. 另外, 为了使得cpo成为一个domain, 我们还需要说明存在最小的元素. 注意到既然链的最小上界以及最小元若存在则唯一, 那么cpo和domain完全由其基础集和偏序决定. [译注: 意味不明.] 之后我们将给出各种各样构造cpo和domain的方法, 而将验证i, ii, iii成立的任务留作练习.第3.1节 扁平domain 为了模拟PCF的基本类型 (ground type) nat 和bool , 我们将使用幻灯片31给出的扁平domain 的概念.
离散cpo和扁平domain
对于任意的集合
X , 相等关系
x ⊑ x ′ ⇔ def x = x ′ 使得
( X , ⊑ ) 成为一个cpo, 其被称为以
X 为基础集的
离散 cpo.
令
X ⊥ = def X ∪ { ⊥ } , 其中
⊥ 是某个不在
X 中的元素, 那么
d ⊑ d ′ ⇔ def ( d = d ′ ) ∨ ( d = ⊥ ) 使得
( X ⊥ , ⊑ ) 成为一个以
⊥ 为最小元的domain, 其被称为由
X 确定的
扁平 domain.
幻灯片31
自然数的扁平domain ℕ ⊥ , 上一章的图1中我们就已描绘过其图像. 至于布尔值的扁平domain 𝔹 ⊥ , 其Hasse图为true false ⊥ 以下牵涉扁平domain的连续函数实例对于PCF的指称语义而言也是必要的, 我们将其验证留给读者作为练习.
命题1. 令f : X ⇀ Y 是两个集合之间的部分函数, 那么f ⊥ ⁡ ( d ) = def { f ⁡ ( d ) , 如果 d ∈ X 且 f 定义于 d ⊥ , 如果 d ∈ X 而 f 在 d 上没有定义 ⊥ , 如果 d = ⊥ 定义了相应扁平domain之间的连续函数f ⊥ : X ⊥ → Y ⊥ .
第3.2节 domain的积 cpo和domain的二元积
两个cpo
( D 1 , ⊑ 1 ) 和
( D 2 , ⊑ 2 ) 之
积 的基础集为
D 1 × D 2 = { ( d 1 , d 2 ) | d 1 ∈ D 1 & d 2 ∈ D 2 } 而其上的偏序
⊑ 定义如下
( d 1 , d 2 ) ⊑ ( d 1 ′ , d 2 ′ ) ⇔ def d 1 ⊑ 1 d 1 ′ & d 2 ⊑ 2 d 2 ′ 链的最小上界可以按照分量进行计算:
⨆ n ≥ 0 ( d 1 , n , d 2 , n ) = ( ⨆ i ≥ 0 d 1 , i , ⨆ j ≥ 0 d 2 , j ) 若
( D 1 , ⊑ 1 ) 和
( D 2 , ⊑ 2 ) 都是domain, 那么
( D 1 × D 2 , ⊑ ) 也是一个domain, 并且
⊥ D 1 × D 2 = ( ⊥ D 1 , ⊥ D 2 ) 幻灯片32
命题1. 投影和配对. 令D 1 和D 2 是cpo, 那么投影π 1 : D 1 × D 2 → D 1 , ( d 1 , d 2 ) ↦ d 1 和π 2 : D 1 × D 2 → D 2 , ( d 1 , d 2 ) ↦ d 2 是连续函数. 如果f 1 : D → D 1 和f 2 : D → D 2 是连续函数, 其中D 是一个cpo, 那么〈 f 1 , f 2 〉 : D → D 1 × D 2 , d ↦ ( f 1 ⁡ ( d ) , f 2 ⁡ ( d ) ) 是连续的.
证明. 这些函数的连续性可由幻灯片32上对于
D 1 × D 2 中的链的最小上界的刻画直接推出.
◻
命题2. 对于每个domain D , 函数if : 𝔹 ⊥ × ( D × D ) → D , ( x , ( d , d ′ ) ) ↦ { d , 如果 x = true d ′ , 如果 x = false ⊥ D , 如果 x = ⊥ 是连续的.
我们将会需要以下更一般的积构造.
定义3. 依赖积. 给定集合
I , 设对于每个
i ∈ I 我们有一个cpo
( D i , ⊑ i ) , 那么这个cpo族之
积 为
基础集是集合D i 的I 重笛卡尔积∏ i ∈ I D i , 其由所有这样的函数p 构成, p 定义在I 上, 而p 在每个i ∈ I 处的值p ⁡ ( i ) ∈ D i ; 偏序⊑ 为p ⊑ p ′ ⇔ def ∀ i ∈ I . p ⁡ ( i ) ⊑ i p ′ ⁡ ( i ) . 就和二元积的情况一样,
( ∏ i ∈ I D i , ⊑ ) 中的链的最小上界也可以逐分量计算: 如果
p 0 ⊑ p 1 ⊑ p 2 ⊑ … 是积cpo中的一个链, 那么其最小上界是将每个
i ∈ I 映射至
D i 中的链
p 0 ⁡ ( i ) ⊑ p 1 ⁡ ( i ) ⊑ p 2 ⁡ ( i ) ⊑ … 的最小上界的函数, 即
( ⨆ n ≥ 0 p n ) ⁡ ( i ) = ⨆ n ≥ 0 p n ⁡ ( i ) , i ∈ I . 而且, 对于每个
i ∈ I , 第
i 投影函数
π i : ∏ j ∈ I D j → D i , p ↦ p ⁡ ( i ) 是连续的. 如果每个
D i 都是domain, 那么它们的积也是domain, 并且其最小元是将每个
i ∈ I 映射至
D i 的最小元的函数.
两个参数的连续函数
命题. 令D , E , F 是cpo, 那么函数f : D × E → F 是单调的当且仅当其对于每个参数分别都是单调的:∀ d , d ′ ∈ D , e ∈ E . d ⊑ d ′ ⇒ f ⁡ ( d , e ) ⊑ f ⁡ ( d ′ , e ) ∀ d ∈ D , e , e ′ ∈ E . e ⊑ e ′ ⇒ f ⁡ ( d , e ) ⊑ f ⁡ ( d , e ′ ) 而且, 其是连续的当且仅当其对于每个参数分别都是连续的 [译注: 在单调的基础之上, 也就是对于每个参数分别都是保持链的最小上界的]:f ⁡ ( ⨆ n ≥ 0 d n , e ) = ⨆ n ≥ 0 f ⁡ ( d n , e ) f ⁡ ( d , ⨆ n ≥ 0 e n ) = ⨆ n ≥ 0 f ⁡ ( d , e n )
幻灯片33
两个参数的连续函数: 推导规则
在f 单调的情况下, 我们有x ⊑ x ′ y ⊑ y ′ f ⁡ ( x , y ) ⊑ f ⁡ ( x ′ , y ′ ) 在f 连续的情况下, 我们有f ⁡ ( ⨆ m ≥ 0 x m , ⨆ n ≥ 0 y n ) = ⨆ k ≥ 0 f ⁡ ( x k , y k ) 幻灯片34
证明. "仅当"的方向是直接的, 其证明依赖于简单的观察, 即
d ⊑ d ′ ⇒ ( d , e ) ⊑ ( d ′ , e ) 和
( ⨆ n ≥ 0 d n , e ) = ⨆ n ≥ 0 ( d n , e ) , 以及它们之于右参数的对偶版本. 对于"当"的方向, 首先设
f 对于每个参数分别都是单调的, 那么如果
D × E 中有
( d , e ) ⊑ ( d ′ , e ′ ) , 根据二元积的定义, 我们可以推出
D 中有
d ⊑ d ′ 而
E 中有
e ⊑ e ′ , 因此
f ⁡ ( d , e ) ⊑ f ⁡ ( d ′ , e ) 根据对于第一个参数的单调性 ⊑ f ⁡ ( d ′ , e ′ ) 根据对于第二个参数的单调性 于是,
f ⁡ ( d , e ) ⊑ f ⁡ ( d ′ , e ′ ) , 即
f 是单调函数.
现在设
f 对于每个参数分别都是连续的, 那么如果
( d 0 , e 0 ) ⊑ ( d 1 , e 1 ) ⊑ ( d 2 , e 2 ) ⊑ … 是二元积中的一个链, 我们有
f ⁡ ( ⨆ n ≥ 0 ( d n , e n ) ) = f ⁡ ( ⨆ i ≥ 0 d i , ⨆ j ≥ 0 e j ) 见幻灯片32 = ⨆ i ≥ 0 f ⁡ ( d i , ⨆ j ≥ 0 e j ) 根据对于第一个参数的连续性 = ⨆ i ≥ 0 ⨆ j ≥ 0 f ⁡ ( d i , e j ) 根据对于第二个参数的连续性 = ⨆ n ≥ 0 f ⁡ ( d n , e n ) 根据幻灯片27上的引理 而这就说明了
f 的连续性.
◻
第3.3节 函数domain 两个cpo/domain之间的所有连续函数的集合可以赋予一个偏序而成为一个cpo/domain, 见幻灯片35. 有时我们也用术语"指数cpo/domain (exponential cpo/domain)"而不是"函数cpo/domain".
函数cpo和domain
给定cpo
( D , ⊑ D ) 和
( E , ⊑ E ) , 函数cpo
( D → E , ⊑ ) 的基础集为 [译注: 以下符号有点过载]
( D → E ) = def { f : D → E | f 连续 } 而偏序为
f ⊑ f ′ ⇔ def ∀ d ∈ D . f ⁡ ( d ) ⊑ E f ′ ⁡ ( d ) 推导规则:
f ⊑ ( D → E ) g x ⊑ D y f ⁡ ( x ) ⊑ E g ⁡ ( y ) 幻灯片35
函数cpo和domain (续)
链的最小上界可以逐参数计算:
⨆ n ≥ 0 f n = λ d ∈ D . ⨆ n ≥ 0 f n ⁡ ( d ) 推导规则:
( ⨆ n ≥ 0 f n ) ⁡ ( ⨆ n ≥ 0 x n ) = ⨆ k ≥ 0 f k ⁡ ( x k ) 如果
D 和
E 还是domain, 那么
D → E 也成为一个domain, 并且最小元为
⊥ D → E : D → E , d ↦ ⊥ E . 幻灯片36
第4章 Scott归纳 第5章 PCF 第6章 PCF的指称语义 第7章 将指称语义和操作语义联系起来 第8章 完全抽象