1 / 85

第 2 章 泛代数和代数数据类型

第 2 章 泛代数和代数数据类型. 函数式程序设计语言 PCF 由三部分组成 代数数据类型:自然数类型和布尔类型 带函数和积等类型的纯类型化  演算 不动点算子 第 2 章到第 4 章对 这三 部分进行透彻的研究 本章研究像自然数类型和布尔类型这样的代数数据类型. 2 .1 引 言. 代数数据类型 包括 一个或多个值集 一组在这些集合上的函数 基本限制是其函数不能有函数变元 基本“类型”( type ) 符号被称为“类别” ( sort ) 泛代数(也叫做等式逻辑) 定义和研究代数数据类型的一般数学框架

axelle
Download Presentation

第 2 章 泛代数和代数数据类型

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第2章 泛代数和代数数据类型 • 函数式程序设计语言PCF由三部分组成 • 代数数据类型:自然数类型和布尔类型 • 带函数和积等类型的纯类型化演算 • 不动点算子 • 第2章到第4章对这三部分进行透彻的研究 • 本章研究像自然数类型和布尔类型这样的代数数据类型

  2. 2.1 引 言 • 代数数据类型包括 • 一个或多个值集 • 一组在这些集合上的函数 • 基本限制是其函数不能有函数变元 • 基本“类型”(type)符号被称为“类别” (sort) • 泛代数(也叫做等式逻辑) • 定义和研究代数数据类型的一般数学框架 • 本章研究泛代数和它在程序设计中定义常用数据类型时的作用

  3. 2.1 引 言 • 本章主要内容: • 代数项和它们在多类别代数中的解释 • 等式规范(也叫代数规范)和等式证明系统 • 等式证明系统的可靠性和完备性(公理语义和指称语义的等价) • 代数之间的同态关系和初始代数 • 数据类型的代数理论 • 从代数规范导出的重写规则(操作语义) 包括了大多数逻辑系统中的一些公共议题

  4. 2.2代数、基调和项 2.2.1 代数 • 代数 • 一个或多个集合,叫做载体 • 一组特征元素和一阶函数,也叫做代数函数 f : A1  …AkA • 例:NN, 0, 1, +,  • 载体N是自然数集合 • 特征元素0, 1N,也叫做零元函数 • 函数+, : N N  N

  5. 2.2代数、基调和项 • 多个载体的例子 • APCFN, B, 0, 1, …, +, true, false, Eq ?, … • 下面逐步给出代数的一种语法描述,有穷的语法表示在计算机科学中十分重要,可用来 • 定义数据类型 • 证明数据类型的性质 • 还必须讨论这种语法描述的指称语义 • 满足一组等式的除了APCF外,可能还有: A5PCF N5, B, 0, 1, 2, 3, 4, +5, true, false, Eq ?, …

  6. 2.2代数、基调和项 2.2.2代数项的语法 • 基调S,F • S是一个集合,其元素叫做类别 • 函数符号f : s1 … sks的集合F ,其中表达式s1 … sks叫做f 的类型 • 零元函数符号叫做常量符号 • 例: NS,F sorts : nat fctns : 0, 1 : nat ,  : nat nat nat

  7. 2.2代数、基调和项 • 项 • 定义基调的目的是用于写代数项 • 项中可能有变量,因此需假定一个无穷的符号集合V,其元素称为变量 • 类别指派x1 : s1, …, xk : sk • 基调S,F和类别指派上类别s的代数项集合Termss (, )定义如下: 1、如果x : s  ,那么x  Termss (, ) 2、如果f : s1 …  sk s并且Mi Terms (, ) (i  1, …, k),那么f M1 … Mk  Termss (, ) 当k  0时,如果f : s,那么f Termss (, ) si

  8. 2.2代数、基调和项 • 项的例子 • 0, 0  1 Termsnat (N, ) • 0  x  Termsnat (N, ),其中   x : nat, … • 代数项中无约束变元 • NxM就是简单地把M中x的每个出现都用N代替 • 记号 , x : s     x : s • 引理2.1 • 若MTermss(, , x : s)且NTermss(, ),那么NxMTermss (, ) • 证明 按Termss(, )中项的结构进行归纳

  9. 2.2代数、基调和项 • 例 用基调stk  S, F来写自然数和自然数栈表达式 sorts : nat, stack fctns : 0, 1, 2, … : nat ,  : nat  nat  nat empty : stack push : nat  stack  stack pop : stack  stack top : stack  nat • push 2 (push 1 (push 0 empty) )是该基调的项

  10. 2.2代数、基调和项 2.2.3 代数以及项在代数中的解释 • 基调的代数是为代数项提供含义的数学结构 • 是一个基调,则代数A包含 • 对每个s  S,正好有一个载体As • 一个解释映射I 把函数I(f ): A  …  A As 指派给函数符号 f : s1  …  sk s  F 把I(f )  As指派给常量符号f : s F • N代数N 写成 N N,0N,1N,N,N s1 sk

  11. 2.2代数、基调和项 • 代数A的环境 •  : V  sAs • 环境 满足 • 如果对每个x : s  都有(x)As • M  Termss(, )的含义AM是 • Ax  (x) • AM  fA(AM1, …, AMk) • 若f : s是常量符号,则Af   fA 若A清楚时,省略A而直接写成M 不依赖于时,用AM表示M在A中的含义

  12. 2.2代数、基调和项 • 例 若(x) 0N x  1  N(x, 1)  N((x), 1N)  N(0N, 1N)  1N

  13. 2.2代数、基调和项 • 例 Astk N, N, 0A, 1A, …, A, A, emptyA, pushA, popA, topA emptyA , 空序列 pushA(n, s)  n :: s popA(n :: s)  s popA()   topA(n :: s)  n topA()  0A 若把x:nat映射到自然数3,把s:stack映射到2, 1  pop(push x s)   popA(pushA(x ,  s ) )  popA(pushA(3, 2, 1 ) )  popA( 3, 2, 1 )  2, 1

  14. 2.2代数、基调和项 • 引理2.2 令A是代数,MTermss(, ),并且是满足 的环境,那么M  As 证明 根据Termss(, )中项的结构进行归纳 • 引理2.3 令x1, …, xk是由出现在MTermss(, )中的所有 变量构成的变量表,1和2是满足的两个环境, 并 且对i1, …, k有1(xi) 2(xi), 那么M1 M2 证明 基于项结构的归纳

  15. 2.2代数、基调和项 2.2.4 代换引理 • 引理2.4 令MTermss(, , x:s)并且N Termss(, ),那 么NxMTermss(, )。并且对任何环境,有  NxM   M (x  a), 其中a  N,它是N在下的含义 证明 根据项M的结构进行归纳

  16. 2.3等式、可靠性和完备性 • 代数规范 一个基调 + 一组等式 • 调查什么样的代数满足这些等式强加的要求 • 使用等式证明系统可推导的新的等式 • 可靠性:从规范可证明的等式在任何满足该规范的代数中都成立 • 完备性:在满足规范的所有代数中都成立的等式都可从该规范证明 • 代数规范是描述代数数据类型公理语义的工具

  17. 2.3等式、可靠性和完备性 2.3.1 等式 公式 M  N ,对某个s,M, N  Termss (, ) • 若满足,并且还有M  N,则认为代数A在环境下满足M  N ,写成 A, M  N  • 若A在任何环境下都满足该等式,则写成 AM  N  • 若代数类C中的任何代数A都满足该等式,写成 CM  N  • 若任何一个代数都满足等式M  N ,则写成  M  N (永真的、有效的 )

  18. 2.3等式、可靠性和完备性 • 平凡的代数 若A满足上所有等式,就说代数A是平凡的 • 例 • 令有两个类别a和b,令A是一个代数,其中Aa{0,1}并且Ab • A不可能满足x  y [x : a, y : a],即下式不成立 A x  y [x : a, y : a] • 但是A x  y [x : a, y : a, z : b]无意义地成立

  19. 2.3等式、可靠性和完备性 2.3.2项代数 • 项代数Terms(, ) • 类别s的载体:集合Termss(, ) • 函数符号f : s1  …  sk s的解释 I (f ) (M1, …, Mk)  f M1 … Mk • 项代数Terms(, )的环境也叫做一个代换 • 如果S是代换,则用SM表示同时把M中的各个变量x用Sx替换的结果 • 因此用M表示把代换作用于M的结果

  20. 2.3等式、可靠性和完备性 • 例 • 类别u • 函数符号f : u  u和g : u  u  u •   {a : u, b : u, c : u} • Tu a, b, c, fa, fb, fc, gaa, gab, gac, gbb, …, g (f (fa)) (f(gbc)), … } • 若环境把变量x映射到a,把y映射到f b,则 T g(f x) (f y)   g(fa) (f (f b))

  21. 2.3等式、可靠性和完备性 • 引理2.5 令MTerms(, ),并且是满足的项代数 Terms(, )的环境,那么M   M 证明 对项进行归纳证明 • 从项代数可以知道,只有M和N是语法上相同的项时,等式M  N 才会永真

  22. 2.3等式、可靠性和完备性 2.3.3 语义蕴涵和等式证明系统 • 代数规范Spec  , E : 基调和一组等式E • 语义蕴涵:E M  N  • 满足E的所有代数A都满足等式M  N  • 语义理论E: • 如果E M  N 蕴涵M  N   E • 代数A的理论Th(A) • 在A中成立的所有等式的集合 • 这是一个语义理论

  23. 2.3等式、可靠性和完备性 • 回顾 • 证明系统的可靠性 若等式E从一组假设E可证,则E语义上蕴涵E • 证明系统的完备性 若E 语义上蕴涵等式E,则E从E可证 • 下一步 • 先给出代数证明系统,然后讨论可靠性和完备性

  24. M = N  N = M  M = N  N = P  M = P  M = N  M = N , x : s M = N , x : s P = Q  P/xM = Q/xN  2.3等式、可靠性和完备性 1、语义相等是个等价关系,因此有 M  M  2、在等式中增加类别指派的规则 3、等价代换 x不在中 P , Q Termss(, )

  25. 2.3等式、可靠性和完备性 • 等式可证 若从E中的等式和公理(ref)及推理规则(sym)、 (trans)、(subst) 和(add var) 可推出等式M  N , 则说该等式可证,写成 E M  N  • 语法理论 如果EM  N 蕴涵 M  N  E • E的语法理论Th(E) 从E可证的所有等式的集合

  26. 2.3等式、可靠性和完备性 • 等式集合E是语义一致的 若存在某个等式M  N ,它不是E的语义蕴涵 • 等式集合E是语法一致的 若存在某个等式M  N ,它不能由E证明

  27. 2.3等式、可靠性和完备性 top(push x s ) = x [s : stack, x : nat] empty = empty [x : nat] top(push x empty ) = x [x : nat] 3 = 3 [ ] top(push 3 empty ) = 3 [ ] • 例 • 在基调stk  S, F上增加等式 top (push x s ) = x [s : stack, x : nat] pop (push x s ) = s [s : stack, x : nat] • 使用这些等式可以证明等式 top (push 3 empty ) = 3

  28. 2.3等式、可靠性和完备性 M = N  N = P  P = Q  M = Q  M1= N1 …Mk= Nk f M1… Mk = f N1… Nk  M = N , x : s M = N  si • 导出规则 f : s1  …  sk  s Mi, NiTerms (, ) M和N中没有x, Termss(, )非空

  29. 2.3等式、可靠性和完备性 • 定理2.6(可靠性) 如果E M  N ,那么E M  N  证明 可以根据该证明的长度进行归纳 • 归纳基础:长度为1的证明,它是公理或E的一个等式 • 归纳假设:M  N 的最后一步是从E1, …, En得到,那么,若AE,则A满足E1, …, En • 要证明:若A满足最后一条规则的这些前提,则A满足M  N  • 证明 根据证明规则的集合,分情况进行分析

  30. 2.3等式、可靠性和完备性 • 命题2.7 存在代数理论E和不含x的项M和N,使得 E M =N , x : s,但是EM =N  证明 • 令基调有类别a和b,函数符号f : a  b和c, d : b • 令E是包含能从f x =c [x : a]和f x =d [x : a]证明的所有等式 • 显然c =d [x : a] E • 可以找到一个使等式c = d []不成立的模型 a和b对应的分别是空集和多于2个元素的集合 • 由可靠性,c =d []是不可能从E证明的

  31. 2.3等式、可靠性和完备性 • 例 • 栈代数规范 sorts : nat, stack fctns : 0, 1, 2, … : nat +,  : nat  nat  nat empty : stackpush: nat  stack  stack pop : stack  stacktop : stack  nat eqns : [ s : stack; x : nat] 0 + 0 = 0, 0 + 1 = 1, … 0  0 = 0, 0  1 = 0, … top (push x s ) = x pop (push x s ) = s

  32. 2.3等式、可靠性和完备性 • 等式 push (top s) (pop s) = s [s : stack] 是不可证的 • 任何形式为 top empty = M [] 的等式都是不可证的,若M是类别为nat的项,并且 不含empty

  33. 2.3等式、可靠性和完备性 2.3.4 完备性的形式 用于不同逻辑系统的三种不同形式的完备性 1、最弱的形式 所有的永真公式都是可证的 2、演绎完备性 每个语义蕴涵在证明系统中都是可推导的 3、最小模型完备性 • 每个语法理论都是某个“最小”模型的语义理论 • 对代数来说,最小模型完备性意味着每个语法理论是某个代数A的Th(A) • “最小模型”是指它的理论包含的等式最少

  34. 2.3等式、可靠性和完备性 • 最小模型完备性不一定成立 考虑等式 E x = y [ x : a, y : a, z : b ] 1、a的载体只含一个元素,则E满足,此时 E1x = y [ x : a, y : a ] 成立 2、b的载体为空,则E也满足,此时 E2z = w [ z : b, w : b ] 成立  E1和E2都不是E的语义蕴涵  不存在代数,其理论正好就是由E的等式推论 组成的语法理论

  35. 2.3等式、可靠性和完备性 2.3.5 同余、商和演绎完备性 • 同余关系:等价关系加上同余性 • 同余性:指函数保可证明的相等性 • 对单类代数A = A, f1A, f2A, … 同余关系是载体A上的等价关系,使得对每个k元函数fA,若aibi(i=1,…, k),即ai和bi等价,则fA(a1, …, ak )  fA(b1, …, bk ) • 对多类代数A = As,I 同余关系是一簇等价关系  s, s  AsAs,使得对每个f : s1 … sks及变元序列a1, …, ak和b1, …, bk(ai s bi  As),有fA(a1, …, ak ) s fA(b1, …, bk ) i i

  36. 2.3等式、可靠性和完备性 • A模的商的代数A 把A中有关系元素a  a 压缩成A的一个元素 • 等价类[a] [a]  a  As a  a  • 商代数A定义: • (A)s是由As的所有等价类构成的集合 Ass  as  a  As} • 函数fA由A的函数fA确定 对适当载体的a1,…, ak, fA ([a1], …, [ak]) = [fA(a1, …, ak)]

  37. 2.3等式、可靠性和完备性 • 上面定义有意义的条件是 • fA([a1], …, [ak])必须只依赖于[a1], …, [ak],而不能依赖于所选的代表a1, …, ak • 例 单类别代数N,0,1,上的同余关系“模k等价” • 这个商代数是众所周知的整数模k的加结构。如果k等于5,那么3  4  2

  38. 2.3等式、可靠性和完备性 • 如果是A的一个环境,是一个同余关系,那么A的环境 定义如下:  (x) = [(x)] • 反过来,对于A的环境,对应它的A的环境有多种选择 • 引理2.8 令是代数A上的同余关系,项MTerms(, ) 并且是满足的环境。那么项M在商代数A和环 境下的含义(A)M由下式决定 (A )M = AM

  39. 2.3等式、可靠性和完备性 • 引理2.9 令E是一组等式集合,令Terms(, )是基调上 的项集。由E的可证明性确定的关系E, 是Terms(, )上的同余关系 • 定理2.10( 完备性) 如果E M  N ,那么E M  N  • 完备性定理加上可靠性定理表明语法理论和语义理论相同

  40. 2.3等式、可靠性和完备性 M = N , x : s M = N  2.3.6 非空类别和最小模型性质 • 没有空载体的代数有最小模型完备性 • 类别s非空:集合Termss(, )不是空集 • 对应的载体肯定非空 • 没有空载体时,可以增加推理规则(nonempty) • 定理2.11 令E是封闭于规则(nonempty)的语法理论,那 么存在所有的载体都非空的代数A,使得ETh(A)

  41. 2.4 同态和初始性 1 k 2.4.1 同态和同构 将同态和同构概念从单类代数推广到多类代数 • 同态是从一个代数到另一个代数的保结构的映射 • 从代数A到B的同态h : A  B • 一簇映射h = {hs| s  S },使得对的每个函数符号f : s1  …  sk  s,有 hs(f A(a1, …, ak) ) = f B(hs(a1), …, hs(ak) )

  42. 2.4 同态和初始性 • 例 令N = N, 0, 1,  ,是模k的等价关系,则把nN 映射到它的等价类[n]是从N到N的一个同态, 因为 h(0) = 0N = [0] h(n + m) = h(n) Nh(m) = [n + m] • 任何代数到它商代数的同态都用这种方式定义

  43. 2.4 同态和初始性 • 例 含义函数是从项代数T= Terms(, )到任意代数 A的一个同态h :T A。如果是A的一个满足 的环境,该同态的定义是 h(M) = AM • 这是一个同态,因为 h (f M1 … Mk ) = Af M1 … Mk = fA(AM1,…, AMk) = fA(h (M1), …, h (Mk) )

  44. 2.4 同态和初始性 • 引理2.13 令h :AB是任意同态,并且是满足类别指派 的任意A环境。那么对任何项MTerms(, ),有 h(AM) = BMh 当M中不含变量时,h(AM) =BM • 证明 基于项的归纳 • 引理2.14 如果h :AB和k :B C都是代数的同态,那么 合成kh :AC也是代数的同态, (k h)s = kshs • 同构 一个双射的同态, 写成A  B

  45. 2.4 同态和初始性 B1 A B2 B3 2.4.2 初始代数 • C是一类代数并且AC,若对每个BC,存在唯一的同态h : AB,则A在C中叫做初始代数 • 初始代数是“典型”的 • 初始代数有尽可能少的非空载体 • 初始代数满足尽可能少的闭等式

  46. 2.4 同态和初始性 • 例 基调0 • 类别nat, • 函数符号0 : nat和S : nat  nat • 令C是所有0代数构成的代数类 • 闭项代数T  Terms(0, )是C的初始代数 它的载体是所有闭项0, S(0), …, Sk(0), … 该代数的函数S把Sk(0)映射到Sk1(0) 该代数的元素少到能解释所有的函数符号 该代数满足项之间尽可能少的等式

  47. 2.4 同态和初始性 • 引理2.15 假定h : AB和k : BA都是同态,并且 h  k = IdB,k  h = IdA。那么A和B同构 • 命题2.16 若A和B在代数类C中都是初始代数,则A和B同构 • 命题2.17 令E是一组等式,且令A=Terms(, )E, 是模 可证明的相等性的代数,则A对E来说是初始代数 • 由项代数和商的性质可知,从E可证明的等式在A中都成立 • 还要证明从A到任何满足E的代数有唯一的同态

  48. 2.4 同态和初始性 • 例 sorts:nat fctns: 0 : natS : nat  nat  : nat  nat  nat; eqns: [x : nat, y : nat] x + 0 = x x + (Sy) = S(x + y) 可以证明如下事实: • Sk0 + Sl0 = Sk + l0 • 对任何闭项M,存在某个自然数k,使得M = Sk0

  49. 2.4 同态和初始性 • 例x + 0 = x x + (Sy) = S (x + y) 可以证明如下事实: • 等式Sk0 = Sl0是不可证的,除非k = l • 每个等价类正好包含一个形式为Sk0的项 • 等价类集和形式为Sk0的项集间有一个双射 • 若把闭项集合{0, S0, …, Sk0, …}作为载体,函数S映射Sk0 Sk+10,映射(Sk0, Sl0) Sk+l0,则得一个初始代数 • 这个初始代数和该基调的标准模型(有后继算子和加法的自然数)同构

  50. 2.4 同态和初始性 • 初始代数和其他代数的比较 1、和有更多元素的代数比较 • 多余的元素不能由项定义(有垃圾) 例1:整数代数Z 例2: A = Anat, 0A, SA, +A Anat = (0  N)  ({1}  Z) 0A = 0, 0 SAi, n = i, n +1 i, n +Aj, m = max(i, j), n+m

More Related