380 likes | 511 Views
第 5 章 类型化 演算的模型. PCF 语言的三部分组成 带函数和积类型的纯类型化 演算 自然数类型和布尔类型 不动点算子 第 3 章对代数数据类型进行了透彻的研究 第 4 章研究简单类型化 演算 本章研究不动点算子 上一章的模型不能解释不动点算子. 5.1 引 言. 本章的主要内容 基于完全偏序集合的,带不动点算子的类型化 演算的论域理论模型。 不动点归纳法,这是一种对递归定义进行推理的证明方法 计算的适当性和完全抽象定理,它将 PCF( 及其衍生)的操作语义和基于论域的指称语义联系起来. 5.2 论域理论模型和不动点.
E N D
第5章 类型化演算的模型 • PCF语言的三部分组成 • 带函数和积类型的纯类型化演算 • 自然数类型和布尔类型 • 不动点算子 • 第3章对代数数据类型进行了透彻的研究 • 第4章研究简单类型化演算 • 本章研究不动点算子 • 上一章的模型不能解释不动点算子
5.1 引 言 本章的主要内容 • 基于完全偏序集合的,带不动点算子的类型化演算的论域理论模型。 • 不动点归纳法,这是一种对递归定义进行推理的证明方法 • 计算的适当性和完全抽象定理,它将PCF(及其衍生)的操作语义和基于论域的指称语义联系起来
5.2 论域理论模型和不动点 5.2.1 递归定义和不动点算子 • 在类型化演算中,如果想加递归定义 letrec f : = M in N 只要加上不动点算子fix就够了 • 下面用fix归约的性质来启发fix的语义解释
5.2 论域理论模型和不动点 使用fixnatnat,阶乘函数可以写成fact =deffixnatnat F,其中F是表达式 F =deff :natnat.y:nat.if Eq? y 0 then 1 else yf (y-1) fact nfix Fn = (f : (natnat) (natnat). f (fix f)) F 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)
5.2 论域理论模型和不动点 • 考虑fix F的有限步展开,用另一种方式来理解 • fix[n+1] F = F (fix[n] F) • fix[0] F = diverge (表示处处无定义的函数) • fix[n] F描述F体的计算最多使用n次的递归计算 • (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!} …
5.2 论域理论模型和不动点 • 让fact = n ( fix[n] F)是有直观的计算意义的 • 尚不足以让人相信,对任意的F,n ( fix[n] F)就是F的不动点 • 需要强加一些相对自然的条件到F才能保证这一点 • 当用集合包含对部分函数排序时,n ( fix[n] F)将是F的最小不动点
阶乘函数 常函数1 {0,1,1,1,2,1} {0,1,1,1,2,2} . . . . . . . . . {0,1,1,1} . . . . . . {0,1} {0,5} . . . . . . . . . 5.2 论域理论模型和不动点 • 用集合之间的包含关系来定义部分函数之间的偏序 • 在类型化演算的 论域理论模型中,类型 指称值的偏序集合, 叫做论域
5.2 论域理论模型和不动点 • 和递归相联系的一个特别问题是如何给计算不终止的项以合理解释? • letrec f : nat nat = x: nat. f (x1) in f 3 • 延伸“自然数”论域,包含一个额外的值nat,用以表示类型nat上的不终止的计算 • 任何部分数值函数可以看成值域为自然数加nat上的一个全函数 • 论域上的这种序可用来刻画称之为“信息量”或“定义度”的特征
5.2 论域理论模型和不动点 5.2.2 完全偏序集合、提升和笛卡儿积 • 偏序集合D,:有自反、反对称和传递关系的集合D • 任何集合可以看成有离散序的偏序集合,离散序是指xy当且仅当xy • 上界:如果D,是偏序集合,那么子集SD的上界是元素xD,使得对任何yS都有yx • 最小上界: S的一 个上界,它小于()S的任何其它上界
a2 b2 a1 b1 a0 b0 ai和bi没有最小上界 5.2 论域理论模型和不动点 • 有向集合:在偏序集合D,中,对于子集SD, 如果每个有限集合S0S都有上界在S中, 那么子集S称作有向的 • 有向集合都是非空集合 • 如果SD是线性序, 那么S一定是有向的 • 偏序集合{a0, b0, a1, b1, a2, b2,…},其中对所有 的ij都有aiaj, bj并且 biaj, bj
2 5.2 论域理论模型和不动点 • 完全偏序集合(简称CPO) • 偏序集合D, • 每个有向集合SD都有最小上界,写成∨S • 例:使用离散序,任何集合都可以看成CPO • 例:任何有限偏序集合都是CPO • 例:考虑普通算术序,自然数集合不是CPO • 例:有理数的非平凡闭区间不是CPO,所有小于 的有理数的最小上界是无理数 • 如果S,TD都是有向的,并且S的每个元素都小于或等于T的某个元素,那么∨S ∨T
… 0 1 2 3 4 CPO N的图形表示 5.2 论域理论模型和不动点 • 有最小元的CPO • D D,有一个元素a,使得对D的任何元素b都有a b • 最小元(也叫底元)用D表示 • 提升集合 • 提升CPO D, 得到有底元的 CPO D
5.2 论域理论模型和不动点 • 引理 假定D和E都是CPO。如果D和E都是有底元的,那么它们的积DE也是一个有底元的CPO。而且,如果SDE是有向的,那么∨S=∨S1, ∨S2,其中Si= ProjiS。 如果D和E分别有最小元D和E,那么D, E是DE的最小元
5.2 论域理论模型和不动点 5.2.3连续函数 • CPO上的连续函数 • 包括了在程序设计中使用的所有普通函数 • 给出一类有不动点的函数 • 本节证明从一个CPO到另一个CPO的所有连续函数的集合形成一个CPO • 在构造把每个类型看成一个CPO的模型时,这是最本质的一步,因为构造这样的模型时,函数类型必须解释成CPO
5.2 论域理论模型和不动点 • 如果f : D E是函数,如果S D,用记号 f (S )表示E的子集:f (S ) = { f (d ) | dS} • 单调函数 假设D = D, D和E = E, E都是CPO,并且f :D E 是它们基础集合上的函数,如果d d蕴涵f(d)f (d), 则f是单调的 如果f是单调的并且S是有向的,那么f (S)是有向的 • 连续函数 • 单调 • 如果对每个有向的S D,有f (∨S) ∨f (S)
5.2 论域理论模型和不动点 • 连续函数的例子 • 在实轴闭区间[x, y]上,通常计算意义下的连续函数,当把[x, y]看成一个CPO时,该函数也是连续的 • 任何CPO上的常函数是平凡地连续的 • 如果D是离散序,那么D上的每个函数都是连续的 • 从提升集合A到任何CPO的单调函数是连续的 因为在A上,非平凡有向集合一定是{,a},并且单调函数f一定把∨{,a}=a映射到 ∨f ({, a}) = ∨{f (), f (a)} = f (a) = f (∨{, a})
5.2 论域理论模型和不动点 • 提升函数 如果D和E都是CPO,并且f : D E是连续的,定义 f : (D{}) (E{})如下 f(d) = if d D then f(d) else • 严格函数 如果f是有底元CPO之间的函数,且f() • 引理 令D和E都是CPO,如果f: D E是连续的,那么f: DE是严格的和连续的
5.2 论域理论模型和不动点 • CPO之间的函数集合上的偏序关系 • 假设D = D, D和E = E, E都是CPO,对于连续函数f, g : DE,如果对每个d D,有f(d) E g(d),就说f DE g(逐点地排序) • 记号 • 从D到E的连续函数集,写成 DEDE, DE • 如果S DE是一个函数集合,并且d D,那么S (d) E是由 S (d) = {f (d) | fS} 给出的集合
f9 f10 f5 f7 f6 f8 f3 f1 f2 f4 f0 5.2 论域理论模型和不动点 表5.1 从B到B的单调函数 f () f (true) f (false) f () f (true) f (false) f0f6falsetrue f1 true f7 truefalse f2 false f8 falsefalse f3 truef9 true truetrue f4 falsef10 falsefalsefalse f5 true true
5.2 论域理论模型和不动点 引理 对任何CPO D和E,逐点排序的连续函数 集DE也是一个CPO 具体说,如果SDE是有向的,那么作为其最小上 界的函数f由f(d) =∨S(d)给出。如果E有最小元,则 CPO D E有最小元 • DE是一个偏序集合 • 如果E有最小元E,则x:D.E是D E的最小元 • 每个有向集合S都有最小上界f • f是连续的
5.2 论域理论模型和不动点 • (积函数)作为CPO积上n元函数,f : D 1 … DnE是连续的,当且仅当它在每个变元上是连续的 • (配对函数)如果SD和TE都是有向的,那么∨S, ∨T =∨{s, t | sS, tT} • (射影函数)如果SD E是有向的,那么Proji(∨S) = ∨{ Proji(x) | xS} • (函数作用)如果SDE和TD都是有向的,那么∨S(∨T) = ∨{f (x) | fS, xT} • (函数合成)如果SD E和T E F都是有向的,那么(∨S) (∨T) =∨{g f | fS, gT}
5.2 论域理论模型和不动点 5.2.4 不动点和完全连续体系 • 完全连续体系 • 若有CPOAb0, 0, …, Abk, k ,则Ab0, …, Abk为基类型 • A A A,由 逐坐标地定序 • A 所有连续的f : A, A, ,由 逐点地定序 每个A, 都是一个CPO 这是在CPOAb0, 0, …, Abk, k 上构造的类型框架
5.2 论域理论模型和不动点 • 本节的主要结论:任何若干个CPO上的完全连续类型体系形成一个Henkin模型,并在所有有底元的类型上有最小不动点算子。 • 引理如果D是有底元CPO,并且f : D D连续,那么f有最小不动点 fixD f = ∨{f n () | n 0} 此外,映射fixD是连续的 • 先证∨{f n () | n 0}是不动点 • 再证它是最小不动点 • 最后证明fixD是连续的
5.2 论域理论模型和不动点 • 例:id : D D是有底元CPO D上的恒等函数,计算fix id fix id = ∨{ idn (D) | n 0} = ∨{D} = D • 例: f : PNPN, f (A) = A 不在A中的最小iN,如果它存在的话 很容易看出f k () = {0, …, k-1} 于是fix f = N
5.2 论域理论模型和不动点 5.2.5 PCF的CPO模型 • 考虑PCF语言的论域理论语义APCF • 提供对PCF性质的某种透彻理解 • 提供对PCF进行语义推理的基础 • PCF等式公理系统对APCF的可靠性 • 归约系统对APCF也是可靠的 • PCF等式证明系统对APCF不可能是完备的 • 5.3节将考虑等式公理系统的一个扩展,它基于该CPO模型,能证明项之间更多的性质
5.2 论域理论模型和不动点 • APCF是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不应该指称
5.2 论域理论模型和不动点 • 不动点常量按下面定理进行解释 如果D是有底元CPO,并且f : D D连续,那么f有最小不动点 fixD f = ∨{f n () | n 0} 此外,映射fixD是连续的 • PCF的每个项在APCF中都有含义
5.2 论域理论模型和不动点 • 定理令M和N是上的PCF表达式。如果 M=N:从PCF的公理可以证明,那么APCF满足等式 M=N: • 推论如果 M:是一个良类型的PCF项,并且MN,那么PCF模型APCF满足等式 M=N:
5.2 论域理论模型和不动点 例 阶乘函数可以写成fact =def fixnatnat F,其中 F =deff :natnat. y:nat. if Eq? y 0 then 1 else yf (y-1) • 可以证明,APCF〖F〗是连续的 • APCF〖fact〗=∨{(APCF〖fact〗)n() | n0} • (APCF〖fact〗)0() = natnat • 直接用项来表示相应论域中元素的名字
5.2 论域理论模型和不动点 (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
5.2 论域理论模型和不动点 例:考虑函数F : (natnat) (natnat),其定义为 F =deff :natnat. x:nat. if Eq? x 1 then 1 else f (x-2) 满足下列条件的函数g : nat nat都是上面F的不动点 g(1) = 1 g(x+2) = g(x) 最小不动点是: 当x是奇数时,结果是1; 当x是偶数时,计算不终止。
5.3 不动点归纳 • 例 如果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 (g f )i )() | i 0} = f (fix (gf)) 仅使用PCF的等式证明系统不可能证明 fix (f g) = f (fix (gf))
M= N : M N: MN : , N M: M = N: 5.3 不动点归纳 • 基于项的CPO解释来扩展证明系统 在CPO模型A中,一个近似M N 对环境是满足的,如果A〖M〗A〖N〗 (eq) (asym)
MN : , N P: MP: M1 M2: , N1 N2: M1N1 M2 N2: , x : M N : x : .Mx : . N : 5.3 不动点归纳 (trans) M (bot) = x : . : (botf) (acong) (fcong)
MN =N : fix MN: [/x] A, , [c/x]A [F(c)/x]A [fix F/x]A 常量c不在A中 (fpind) 5.3 不动点归纳 用 A表示从一组等式和近似可以证明等式或近 似A
5.3 不动点归纳 例 证明,如果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 :
5.4 计算适当性和完全抽象 本节完成 =ax =den =op 和 ( programs M) ( results N) M =axN 当且仅当M =denN 当且仅当M =opN 的证明
习 题 第一次:5.3,5.10 第二次: 5.15(a), 5.25(b)