48
第4第 第第第第第第第第 PCF 第第第第第第第第 第第第第第第第第第第第第第第第第 第第第第第第第第第第 第第第第第 第 2 第第第第第第第第第第第第第第第第 第 3 第第第第第第第第第第 第第第第第第第第第第第第第第第 第第第第第第第第第第第第 第第第 3 第第第第第第第第第第第第第

第 4 章 类型化 演算的模型

  • Upload
    job

  • View
    138

  • Download
    0

Embed Size (px)

DESCRIPTION

第 4 章 类型化  演算的模型. PCF 语言由三部分组成 带函数类型和积类型的纯类型化  演算 自然数类型和布尔类型 不动点算子 第 2 章对代数数据类型进行了透彻的研究 第 3 章研究简单类型化  演算 本章先研究递归函数和不动点算子 然后研究类型化  演算 的 模型,因为第 3 章的模型不能解释不动点算子. 4 .1 引 言. 本章的主要内容 递归函数和不动点算子,以及 PCF 语言的编程实例 基于完全偏序集合的,带不动点算子的类型化  演算的论域理论模型 不动点归纳法,这是一种对递归定义进行推理的证明方法. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 4 章  类型化  演算的模型

第 4 章 类型化演算的模型• PCF 语言由三部分组成

– 带函数类型和积类型的纯类型化演算– 自然数类型和布尔类型– 不动点算子

• 第 2 章对代数数据类型进行了透彻的研究• 第 3 章研究简单类型化演算• 本章先研究递归函数和不动点算子• 然后研究类型化演算的模型,因为第 3 章的

模型不能解释不动点算子

Page 2: 第 4 章  类型化  演算的模型

4.1 引 言本章的主要内容• 递归函数和不动点算子,以及 PCF 语言的编

程实例• 基于完全偏序集合的,带不动点算子的类型

化演算的论域理论模型• 不动点归纳法,这是一种对递归定义进行推

理的证明方法

Page 3: 第 4 章  类型化  演算的模型

4.2 递归函数和不动点算子4.2.1 递归函数和不动点算子• 在类型化演算中,可以加递归定义

letrec f : = M in N–f 可以出现在 M 中–M 的类型必须是,否则等式 f = M 没有意义

• 例:定义阶乘函数和计算 5 的阶乘letrec f : nat nat = y : nat.(if Eq? y 0 then 1

else y f (y – 1)) in f 5

把该等式看成关于 f 的方程: f : nat nat =

y : nat. if Eq? y 0 then 1 else y f (y – 1)

Page 4: 第 4 章  类型化  演算的模型

4.2 递归函数和不动点算子• 从数学的观点看

– 含 PCF 表达式 M 的方程 f : = M 是否都有解?– 若有若干个解的话,选择哪个解?– 在讨论 PCF 的指称语义时解决这些问题

• 从计算的观点看– 递归函数声明有清楚的计算解释– 因此,暂且假定每个这样的等式都有解,并在

PCF 中增加上述表示它的语法

Page 5: 第 4 章  类型化  演算的模型

4.2 递归函数和不动点算子• 函数的不动点

若 F : 是类型 到它自身的函数,则 F 的不动点是使得 F (x) = x 的值 x :

例如,自然数上– 平方函数的不动点有 0 和 1– 恒等函数有无数个不动点– 后继函数没有不动点

Page 6: 第 4 章  类型化  演算的模型

4.2 递归函数和不动点算子• 重要联系

– 递归定义 f : = M 可以用函数 f :.M 来表示,因为函数 f :.M 的不动点正好是方程 f = M 的解(f :.M)N = N ,即 [N/f]M = N , N 是 f = M 的解

– 方程 f = M 的求解转化为找函数 f :.M 的不动点例:阶乘函数是

F f : nat nat.y : nat.if Eq? y 0 then 1

else y f (y – 1)

的不动点

Page 7: 第 4 章  类型化  演算的模型

4.2 递归函数和不动点算子• PCF 的最后一个基本构造

fix : ( ) , 对每个类型– fix为任何 到 的函数产生一个不动点– letrec 声明形式看成是 let 和不动点算子组合的一种语法美化 letrec f : M in N

let f : = (fix f :.M) in N

– 也可用语法美化letrec f (x :) : = M in N

letrec f : x :.M in N

Page 8: 第 4 章  类型化  演算的模型

4.2 递归函数和不动点算子• fix 等式公理

fix = f : .f (fix f ) (fix)

fix MM (fix M) (使用 (

) 可得)

• fix 归约规则fix f : . f (fix f )

(fix)

Page 9: 第 4 章  类型化  演算的模型

4.2 递归函数和不动点算子• 继续阶乘函数的例子

使用 fixnatnat ,阶乘函数写成fact fixnatnat F ,其中 F 是表达式F f :natnat.y:nat.if Eq? y 0 then 1

else yf (y-1)

fact n fix F n // 计算 fact n 的前几步 F(fix F) n

(f : natnat.y:nat.if Eq? y 0 then 1

else yf(y-1)) (fix F) n

if Eq? n 0 then 1 else n(fix F) (n-1)

Page 10: 第 4 章  类型化  演算的模型

4.2 递归函数和不动点算子• 乘运算的递归定义

– 基于加运算,并假定有前驱函数 pred ,它把 n > 0 映射到 n 1 ,并把 0 映射到 0

– letrec mult : nat nat nat =p : nat nat.

if Eq? (Proj1 p) 0 then 0

else (Proj2 p) + mult pred (Proj1 p), Proj2 p

in mult 8, 10– 使用更多语法美化: letrec mult x : nat, y : nat : nat = if Eq? x 0 then 0

else y + mult pred x, y in mult 8, 10

Page 11: 第 4 章  类型化  演算的模型

4.2 递归函数和不动点算子4.2.2 有不动点算子的急切归约

考虑 fix 对各种归约策略的影响– 最左归约、惰性归约、并行归约

只要在原来的公理中增加 fix 归约公理即可– 急切归约

若沿用原来的 fix 规则,则对变元先求值的要求会导致归约不终止

引入“延迟”( delay )来暂停对递归定义函数的归约,直到有变元提供给它为止

Page 12: 第 4 章  类型化  演算的模型

4.2 递归函数和不动点算子值(在急切归约中需要引入值的概念)– 若 V 是常量、变量、抽象或值的序对,则 V 是值– delayMx:.Mx, x 在 M : 中非自由的公理– (x :.M)V eager VxM V 是值– Proji(V1, V2) eager Vi V1 和 V2 是值– fixV eager V(delay fixV) V 是值– … …

子项规则– 和上一章一样

Page 13: 第 4 章  类型化  演算的模型

4.2 递归函数和不动点算子• 例:仅含一个平凡不动点

(fix (x : nat nat.y : nat.y)) ((z : nat.z +1)2)

eager(x:nat nat.y:nat.y)(delayfix(x:nat nat. y : nat.y)) ((z : nat.z +1)2)

eager(y:nat.y)((z : nat.z +1)2)

eager (y:nat.y)(2+1) eager (y:nat.y)3 eager 3

• 例:急切归约可能发散(无不动点)let f (x : nat) : nat = 5 in

letrec g (x : nat) : nat = g (x +1) in f (g 3)

Page 14: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点4.3.1 递归定义和不动点算子

– 用 fix 归约的特点来启发论域的主要性质– 以阶乘函数为例:

fact fixnatnat F ,其中 F 是表达式F f :natnat.y:nat.if Eq? y 0 then 1

else yf (y-1)

– 考虑 fix F 的有限步展开,用另一种方式来理解fact

Page 15: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• fix F 的有限步展开

fix[n]F 描述 F 体的计算最多使用 n 次的递归计算– fix[0]F = diverge (表示处处无定义的函数)– fix[n+1]F = F(fix[n]F)– (fix[2]F) 0 = 1 , (fix[2]F)1 = 1 , (fix[2]F) n 对 n 2没有定义– 把函数看成二元组的集合后, fix[n1]F = (fix[n]F) {n, n} ,真包含所有的 fix[i]F (in)– 即 {0, 0!} {0, 0!, 1, 1!} {0, 0!, 1, 1!, 2, 2!} …

Page 16: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点 n( fix

[n]F) 和 F 的不动点– 让 fact = n( fix

[n]F) 是有直观计算意义的– 尚不足以相信,对任意的 F ,

n( fix[n]F)就是 F 的不动点

– 强加一些相对自然的条件到 F才能保证这一点– 当用集合包含对部分函数排序时, n( fix

[n]F)将是 F 的最小不动点

Page 17: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 论域

– 用集合之间的包含关系来定义部分函数之间的偏序

– 在类型化演算的论域理论模型中,类型指称值的偏序集合,叫做论域

{0,1,1,1,2,1}

常函数 1 阶乘函数

{0,1,1,1,2,2}

{0,1,1,1}

{0,1}

{0,5}. . . . . .. . .

. . . . . .. . .

. . .. . .

Page 18: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 计算不终止的项

– 和递归相联系的一个特别问题是如何给计算不终止的项以合理解释 ?

letrec f : nat nat = x: nat. f (x1) in f 3

– 延伸“自然数”论域,包含一个额外的值 nat ,表示类型 nat 上的不终止的计算– 部分数值函数可看成值域为 {nat} 的全函数,在该论域上 nat所有的自然数– 论域上的偏序可以用来刻画称之为“信息量”或“定义度”的特征

Page 19: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点4.3.2 完全偏序集合、提升和笛卡儿积• 定义

– 偏序集合 D, 有自反、反对称和传递关系 的集合 D

– 离散序 指 x y iff x y。集合有离散的偏序–上界

若 D, ,则子集 SD 的上界是元素 xD ,使得对任何 yS 都有 y x

Page 20: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 定义

– 最小上界S 的一 个上界,它小于等于 ()S 的任何其它上

界– 有向集合

在 D, 中,对子集 SD ,若每个有限集合S0S 都有上界在 S 中,则称子集 S 有向

有向集合都非空若 SD 是线性序,则 S 一定有向

– 线性序对所有的 x, yS ,都有 x y 或 y x

Page 21: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 例

偏序集合 {a0, b0, a1, b1, a2, b2, …} ,其中对任意 i

j

都有 ai aj, bj 并且 bi aj, bj

– 两个线性序a0a1a2… ,和b0b1b2…

– {ai, bi}

有上界 ai+1 和 bi+1 等,但没有最小上界

a0

a1

a2

b0

b1

b2

ai 和 bi 没有最小上界

Page 22: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 定义

– 完全偏序集合 D, (简称 CPO ) 若每个有向集合 SD 都有最小上界(∨ S )

• 例– 使用离散序,任何集合都可看成 CPO– 任何有限偏序集合都是 CPO– 考虑普通算术序,自然数集合不是 CPO– 有理数的非平凡闭区间不是 CPO ,所有小于的有理数的最小上界是无理数– 若 S , TD 都有向,且 S 的每个元素都 T 的某个元素,那么∨ S ∨T

2

Page 23: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 定义

– 有最小元的 CPO D, 存在元素 a ,使得对 D 的任何元素 b 都有 a b

最小元(也叫底元)用 D 表示– 提升集合 A

A {}– 提升 CPO ,

类似地可得到有底元的 CPO

…0 1 2 3 4

CPO 的图形表示

Page 24: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 引理 4.3

– 若是一个 CPO ,那么是有底元的 CPO

• 引理 4.4– 若和都是 CPO 并都有底元,则它们的积也是有底元的 CPO。而且,若 SDE 是有向的,则∨ S = ∨S1, ∨S2 ,其中 Si= ProjiS

如果和分别有最小元 D 和 E ,那么 D,E是的最小元

Page 25: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点4.3.3 连续函数

– CPO 上的连续函数– 包括了在程序设计中使用的所有普通函数– 给出的是一类有不动点的函数– 本节证明从一个 CPO 到另一个 CPO 的所有连续函数的集合形成一个 CPO– 在构造把每个类型看成一个 CPO 的模型时,这是最本质的一步,因为构造这样的模型时,函数类型必须解释成 CPO

Page 26: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 记号

– 如果 f : D E 是函数,如果 S D ,用记号 f(S)表示 E 的子集: f (S) = { f (d ) | dS}

• 定义– 单调函数 若 =D, D 和 =E, E 都是 CPO ,且 f : D

E

是它们基础集合上的函数,若 dd蕴涵 f(d) f (d),则 f 单调

若 f 单调且 S 有向,则 f (S) 有向

Page 27: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 定义

– 连续函数 单调,且 若对每个有向的 S D ,都有 f (∨S) ∨f (S)

• 例– 在实轴闭区间 [x, y] 上,若把 [x, y] 看成 CPO 时,则通常计算意义下的连续函数仍然连续– 任何 CPO 上的常函数是平凡地连续的– 若是离散序,则上每个函数都连续– 从提升集合 A到任何 CPO 的单调函数连续

Page 28: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 定义

– 提升函数 如果和都是 CPO ,且 f :D E连续,定义f : (D {}) (E {}) 如下:

f(d) = if d D then f(d) else

– 严格函数若 f 是有底元 CPO之间的函数,且 f ()

• 引理 4.5– 令和都是 CPO, 若 f:DE连续 , 则 f:DE

严格并连续

Page 29: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• CPO之间的函数集合上的偏序关系

– 若 = D, D 和 E = E, E 都是 CPO ,对于连续函数 f, g:DE ,若对每个 dD ,都有 f(d)E g(d) ,就说 f D E g (逐点地排序)

• 记号– 从 到的连续函数集写成

D E, D E– 若 S D E 是函数集合,且 d D ,那么 S(d) E 是由

S (d) = {f (d) | f S}给出的集合

Page 30: 第 4 章  类型化  演算的模型

表 4.2 从 B到 B的单调函数f () f (true) f (false) f () f (true) f (false)

f0 f6 false true

f1 true f7 true false

f2 false f8 false false

f3 true f9 true true true

f4 false f10 false false false

f5 true true

f0

f1 f2f3 f4

f5 f6 f7 f8

f9 f10

Page 31: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 引理 4.6

– 对任何 CPO 和,逐点排序的连续函数集也是一个 CPO

具体说,若 S DE 有向,则作为其最小上界的函数 f 由 f(d) =∨S(d) 给出。若有最小元,则CPO 有最小元

是一个偏序集合若有最小元 E ,则 x:D.E 是 的最小元每个有向集合 S 都有最小上界 f

f 是连续的,即对每个有向的 S D E ,有 f (∨S) ∨f (S)

Page 32: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 常用连续函数

– n 元函数: f :1 … n连续,当且仅当它在每个变元上连续

– 配对函数:若 S D 和 T E 都有向, 则∨ S, ∨T =∨{s, t | sS, tT}

– 射影函数:若 S DE 有向, 则 Proji(∨S)=∨{ Proji(x) | xS}

– 函数应用:若 S DE 和 T D 都有向, 则∨ S(∨T) = ∨{f (x) | fS, xT}

– 函数合成:若 S DE 和 T EF 都有向 ,则 (∨ S) (∨T) =∨{g f | fS, gT}

Page 33: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点4.3.4 不动点和完备连续层级• 完备连续层级

– 若有 CPOAb0, 0, …, Abk, k ,则取 Ab0, …, Abk

为基类型– A A A,由 逐坐标地定序– A 所有连续的 f : A, A, ,由逐点地定序– 由先前引理,每个 A, 都是一个 CPO

这是在 CPOAb0, 0, …, Abk, k 上构造的类型框架

Page 34: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 主要结论

任何若干 CPO 上的完备连续类型层级形成通用模型,并在所有有底元的类型上有最小不动点算子

• 引理 4.8 若是有底元 CPO ,且 f :DD连续,则 f 有最小不动点 fixD f = {∨ f n () | n 0}。此外,映射 fixD 是连续的– 先证∨ {f n () | n 0} 是不动点– 再证它是最小不动点– 最后证明 fixD连续

Page 35: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 例

– id: 是有底元 CPO 上恒等函数,计算 fix id

fix id = {∨ idn (D) | n 0}

= {∨ D}

= D

– f :NN , f(A) =

A 不在 A 中的最小 IN ,若它存在的话 很容易看出 f k () = {0, …, k-1}

于是 fix f = N

Page 36: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点4.3.5 PCF 的 CPO 模型• 要点

– 考虑 PCF 语言的论域理论语义 PCF

提供对 PCF 性质的某种透彻理解提供对 PCF 进行语义推理的基础

– PCF 等式公理系统对 PCF 可靠– 归约系统对 PCF 也可靠– PCF 等式证明系统对 PCF 不可能完备– 4.4节将考虑等式公理系统的一个扩展,它基于该CPO 模型,能证明项之间更多的性质

Page 37: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• PCF 是 N和 B上的完全连续体系

– PCF 的类型常量解释为有底元的 CPO– PCF 的所有类型都可以解释为有底元的 CPO

• 常量的解释–常量 0,1,2,… 和 true , false按通常的方式解释为提升集合 N和 B上的自然数和布尔值– + 和 Eq? 解释为它们普通解释的提升版本和 Eq?

nat + x = x + nat = nat

–条件运算的解释需仔细考虑当 M 指称而 N 不是时, if false then M else N

不应该指称

Page 38: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点– 不动点常量按下面定理进行解释

若是有底元的 CPO ,且 f :连续,则 f 有最小不动点

fixD f = {∨ f n() | n 0}

此外,映射 fixD 是连续的•结论

– PCF 的每个项在 PCF 中都有含义

Page 39: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 定理 4.13

令 M 和 N 是上的 PCF 表达式,若 M =N :从 PCF 的公理可证,

则 PCF满足等式 M = N :

• 推论 4.14若 M: 是良类型的 PCF 项,且 MN ,则

PCF 模型 PCF满足等式 M = N :

Page 40: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 例

阶乘函数可以写成 fact fixnatnat F ,其中F f :natnat. y:nat. if Eq? y 0 then 1

else yf (y-1)

– 可以证明, PCF F 是连续的– APCF fact =∨{(APCF fact)n () | n0}

– (APCF fact)0() = natnat

– 直接用项来表示相应论域中元素的名字

Page 41: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点

(APCF fact)1() = y:nat. if Eq? y 0 then 1

else y ((APCF fact)0() )(y-1)

= y:nat. if Eq? y 0 then 1 else y (natnat) (y-1)

= y:nat. if Eq? y 0 then 1 else nat

Page 42: 第 4 章  类型化  演算的模型

4.3 论域理论模型和不动点• 例

考虑函数 F : (natnat) (natnat) ,其定义为 F f :natnat. x:nat. if Eq? x 1 then 1 else f (x-2) 满足下列条件的函数 g:natnat 都是上面 F 的不动点

g(1) = 1g(x+2) = g(x)

最小不动点是:当 x 是奇数时,结果是 1

当 x 是偶数时,计算不终止

Page 43: 第 4 章  类型化  演算的模型

4.4 不动点归纳• 例 如果 f : D D 和 g : D D 是某个 CPO D

上的连续函数,则 fix (f g) = f (fix (gf))fix (f g) = {(∨ f g)i () | i 0}

= {∨ , ( f g) (), ( f g f g) (), …}

= {∨ f (), (f (g f ))(), (f (g f )2)(),... }

= {(∨ f (g f )i ) () | i 0}

= f (fix (gf))

仅使用 PCF 的等式证明系统不可能证明fix (f g) = f (fix (gf))

Page 44: 第 4 章  类型化  演算的模型

4.4 不动点归纳• 基于项的 CPO 解释来扩展证明系统

在 CPO 模型 A 中,近似 M N 对环境 是满足的,如果 M N

(eq)

(asym)

M = N :

M N:

M N : , N M :

M = N:

Page 45: 第 4 章  类型化  演算的模型

4.4 不动点归纳

(trans)

M (bot)

= x : . : (botf)

(acong)

(fcong)

M N : , N P :

M P :

M1 M2 : , N1 N2 :

M1 N1 M2 N2 : , x : M N :

x : . M x : . N :

Page 46: 第 4 章  类型化  演算的模型

4.4 不动点归纳

用 A 表示从一组等式和近似可以证明等式或近似 A

MN = N :

fix M N :

[/x] A, , [c/x]A [F(c)/x]A [fix F/x]A

常 量 c 不 在 A 中 (fpind)

Page 47: 第 4 章  类型化  演算的模型

4.4 不动点归纳例 证明 ,如果 N 是 M 的一个不动点 , 那么 fix M

N– 假定 MN N ,这就有 MN N

– 令 A , x : x N : ,其中 x 在 N 中不是自由的– 令不动点归纳规则中 F 是 M

1 、首先证明 [/x]A N :

2 、然后取 [c/x]A c N :作为假设,证明[Mc/x]A Mc N :

根据假设 c N,由单调性,有 Mc MN :

因为 MN N ,所以 Mc N :

Page 48: 第 4 章  类型化  演算的模型

第一次: 4.6 , 4.7 , 4.12

第二次: 4.18 , 4.25

第三次: 4.30(a) , 4.40(b)

习 题