850 likes | 1.11k Views
第 2 章 泛代数和代数数据类型. 函数式程序设计语言 PCF 由三部分组成 代数数据类型:自然数类型和布尔类型 带函数和积等类型的纯类型化 演算 不动点算子 第 2 章到第 4 章对 这三 部分进行透彻的研究 本章研究像自然数类型和布尔类型这样的代数数据类型. 2 .1 引 言. 代数数据类型 包括 一个或多个值集 一组在这些集合上的函数 基本限制是其函数不能有函数变元 基本“类型”( type ) 符号被称为“类别” ( sort ) 泛代数(也叫做等式逻辑) 定义和研究代数数据类型的一般数学框架
E N D
第2章 泛代数和代数数据类型 • 函数式程序设计语言PCF由三部分组成 • 代数数据类型:自然数类型和布尔类型 • 带函数和积等类型的纯类型化演算 • 不动点算子 • 第2章到第4章对这三部分进行透彻的研究 • 本章研究像自然数类型和布尔类型这样的代数数据类型
2.1 引 言 • 代数数据类型包括 • 一个或多个值集 • 一组在这些集合上的函数 • 基本限制是其函数不能有函数变元 • 基本“类型”(type)符号被称为“类别” (sort) • 泛代数(也叫做等式逻辑) • 定义和研究代数数据类型的一般数学框架 • 本章研究泛代数和它在程序设计中定义常用数据类型时的作用
2.1 引 言 • 本章主要内容: • 代数项和它们在多类别代数中的解释 • 等式规范(也叫代数规范)和等式证明系统 • 等式证明系统的可靠性和完备性(公理语义和指称语义的等价) • 代数之间的同态关系和初始代数 • 数据类型的代数理论 • 从代数规范导出的重写规则(操作语义) 包括了大多数逻辑系统中的一些公共议题
2.2代数、基调和项 2.2.1 代数 • 代数 • 一个或多个集合,叫做载体 • 一组特征元素和一阶函数,也叫做代数函数 f : A1 …AkA • 例:NN, 0, 1, +, • 载体N是自然数集合 • 特征元素0, 1N,也叫做零元函数 • 函数+, : N N N
2.2代数、基调和项 • 多个载体的例子 • APCFN, B, 0, 1, …, +, true, false, Eq ?, … • 下面逐步给出代数的一种语法描述,有穷的语法表示在计算机科学中十分重要,可用来 • 定义数据类型 • 证明数据类型的性质 • 还必须讨论这种语法描述的指称语义 • 满足一组等式的除了APCF外,可能还有: A5PCF N5, B, 0, 1, 2, 3, 4, +5, true, false, Eq ?, …
2.2代数、基调和项 2.2.2代数项的语法 • 基调S,F • S是一个集合,其元素叫做类别 • 函数符号f : s1 … sks的集合F ,其中表达式s1 … sks叫做f 的类型 • 零元函数符号叫做常量符号 • 例: NS,F sorts : nat fctns : 0, 1 : nat , : nat nat nat
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
2.2代数、基调和项 • 项的例子 • 0, 0 1 Termsnat (N, ) • 0 x Termsnat (N, ),其中 x : nat, … • 代数项中无约束变元 • NxM就是简单地把M中x的每个出现都用N代替 • 记号 , x : s x : s • 引理2.1 • 若MTermss(, , x : s)且NTermss(, ),那么NxMTermss (, ) • 证明 按Termss(, )中项的结构进行归纳
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) )是该基调的项
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
2.2代数、基调和项 • 代数A的环境 • : V sAs • 环境 满足 • 如果对每个x : s 都有(x)As • M Termss(, )的含义AM是 • Ax (x) • AM fA(AM1, …, AMk) • 若f : s是常量符号,则Af fA 若A清楚时,省略A而直接写成M 不依赖于时,用AM表示M在A中的含义
2.2代数、基调和项 • 例 若(x) 0N x 1 N(x, 1) N((x), 1N) N(0N, 1N) 1N
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
2.2代数、基调和项 • 引理2.2 令A是代数,MTermss(, ),并且是满足 的环境,那么M As 证明 根据Termss(, )中项的结构进行归纳 • 引理2.3 令x1, …, xk是由出现在MTermss(, )中的所有 变量构成的变量表,1和2是满足的两个环境, 并 且对i1, …, k有1(xi) 2(xi), 那么M1 M2 证明 基于项结构的归纳
2.2代数、基调和项 2.2.4 代换引理 • 引理2.4 令MTermss(, , x:s)并且N Termss(, ),那 么NxMTermss(, )。并且对任何环境,有 NxM M (x a), 其中a N,它是N在下的含义 证明 根据项M的结构进行归纳
2.3等式、可靠性和完备性 • 代数规范 一个基调 + 一组等式 • 调查什么样的代数满足这些等式强加的要求 • 使用等式证明系统可推导的新的等式 • 可靠性:从规范可证明的等式在任何满足该规范的代数中都成立 • 完备性:在满足规范的所有代数中都成立的等式都可从该规范证明 • 代数规范是描述代数数据类型公理语义的工具
2.3等式、可靠性和完备性 2.3.1 等式 公式 M N ,对某个s,M, N Termss (, ) • 若满足,并且还有M N,则认为代数A在环境下满足M N ,写成 A, M N • 若A在任何环境下都满足该等式,则写成 AM N • 若代数类C中的任何代数A都满足该等式,写成 CM N • 若任何一个代数都满足等式M N ,则写成 M N (永真的、有效的 )
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]无意义地成立
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的结果
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))
2.3等式、可靠性和完备性 • 引理2.5 令MTerms(, ),并且是满足的项代数 Terms(, )的环境,那么M M 证明 对项进行归纳证明 • 从项代数可以知道,只有M和N是语法上相同的项时,等式M N 才会永真
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中成立的所有等式的集合 • 这是一个语义理论
2.3等式、可靠性和完备性 • 回顾 • 证明系统的可靠性 若等式E从一组假设E可证,则E语义上蕴涵E • 证明系统的完备性 若E 语义上蕴涵等式E,则E从E可证 • 下一步 • 先给出代数证明系统,然后讨论可靠性和完备性
M = N N = M M = N N = P M = P M = N M = N , x : s M = N , x : s P = Q P/xM = Q/xN 2.3等式、可靠性和完备性 1、语义相等是个等价关系,因此有 M M 2、在等式中增加类别指派的规则 3、等价代换 x不在中 P , Q Termss(, )
2.3等式、可靠性和完备性 • 等式可证 若从E中的等式和公理(ref)及推理规则(sym)、 (trans)、(subst) 和(add var) 可推出等式M N , 则说该等式可证,写成 E M N • 语法理论 如果EM N 蕴涵 M N E • E的语法理论Th(E) 从E可证的所有等式的集合
2.3等式、可靠性和完备性 • 等式集合E是语义一致的 若存在某个等式M N ,它不是E的语义蕴涵 • 等式集合E是语法一致的 若存在某个等式M N ,它不能由E证明
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
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, NiTerms (, ) M和N中没有x, Termss(, )非空
2.3等式、可靠性和完备性 • 定理2.6(可靠性) 如果E M N ,那么E M N 证明 可以根据该证明的长度进行归纳 • 归纳基础:长度为1的证明,它是公理或E的一个等式 • 归纳假设:M N 的最后一步是从E1, …, En得到,那么,若AE,则A满足E1, …, En • 要证明:若A满足最后一条规则的这些前提,则A满足M N • 证明 根据证明规则的集合,分情况进行分析
2.3等式、可靠性和完备性 • 命题2.7 存在代数理论E和不含x的项M和N,使得 E M =N , x : s,但是EM =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证明的
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
2.3等式、可靠性和完备性 • 等式 push (top s) (pop s) = s [s : stack] 是不可证的 • 任何形式为 top empty = M [] 的等式都是不可证的,若M是类别为nat的项,并且 不含empty
2.3等式、可靠性和完备性 2.3.4 完备性的形式 用于不同逻辑系统的三种不同形式的完备性 1、最弱的形式 所有的永真公式都是可证的 2、演绎完备性 每个语义蕴涵在证明系统中都是可推导的 3、最小模型完备性 • 每个语法理论都是某个“最小”模型的语义理论 • 对代数来说,最小模型完备性意味着每个语法理论是某个代数A的Th(A) • “最小模型”是指它的理论包含的等式最少
2.3等式、可靠性和完备性 • 最小模型完备性不一定成立 考虑等式 E x = y [ x : a, y : a, z : b ] 1、a的载体只含一个元素,则E满足,此时 E1x = y [ x : a, y : a ] 成立 2、b的载体为空,则E也满足,此时 E2z = w [ z : b, w : b ] 成立 E1和E2都不是E的语义蕴涵 不存在代数,其理论正好就是由E的等式推论 组成的语法理论
2.3等式、可靠性和完备性 2.3.5 同余、商和演绎完备性 • 同余关系:等价关系加上同余性 • 同余性:指函数保可证明的相等性 • 对单类代数A = A, f1A, f2A, … 同余关系是载体A上的等价关系,使得对每个k元函数fA,若aibi(i=1,…, k),即ai和bi等价,则fA(a1, …, ak ) fA(b1, …, bk ) • 对多类代数A = As,I 同余关系是一簇等价关系 s, s AsAs,使得对每个f : s1 … sks及变元序列a1, …, ak和b1, …, bk(ai s bi As),有fA(a1, …, ak ) s fA(b1, …, bk ) i i
2.3等式、可靠性和完备性 • A模的商的代数A 把A中有关系元素a a 压缩成A的一个元素 • 等价类[a] [a] a As a a • 商代数A定义: • (A)s是由As的所有等价类构成的集合 Ass as a As} • 函数fA由A的函数fA确定 对适当载体的a1,…, ak, fA ([a1], …, [ak]) = [fA(a1, …, ak)]
2.3等式、可靠性和完备性 • 上面定义有意义的条件是 • fA([a1], …, [ak])必须只依赖于[a1], …, [ak],而不能依赖于所选的代表a1, …, ak • 例 单类别代数N,0,1,上的同余关系“模k等价” • 这个商代数是众所周知的整数模k的加结构。如果k等于5,那么3 4 2
2.3等式、可靠性和完备性 • 如果是A的一个环境,是一个同余关系,那么A的环境 定义如下: (x) = [(x)] • 反过来,对于A的环境,对应它的A的环境有多种选择 • 引理2.8 令是代数A上的同余关系,项MTerms(, ) 并且是满足的环境。那么项M在商代数A和环 境下的含义(A)M由下式决定 (A )M = AM
2.3等式、可靠性和完备性 • 引理2.9 令E是一组等式集合,令Terms(, )是基调上 的项集。由E的可证明性确定的关系E, 是Terms(, )上的同余关系 • 定理2.10( 完备性) 如果E M N ,那么E M N • 完备性定理加上可靠性定理表明语法理论和语义理论相同
2.3等式、可靠性和完备性 M = N , x : s M = N 2.3.6 非空类别和最小模型性质 • 没有空载体的代数有最小模型完备性 • 类别s非空:集合Termss(, )不是空集 • 对应的载体肯定非空 • 没有空载体时,可以增加推理规则(nonempty) • 定理2.11 令E是封闭于规则(nonempty)的语法理论,那 么存在所有的载体都非空的代数A,使得ETh(A)
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) )
2.4 同态和初始性 • 例 令N = N, 0, 1, ,是模k的等价关系,则把nN 映射到它的等价类[n]是从N到N的一个同态, 因为 h(0) = 0N = [0] h(n + m) = h(n) Nh(m) = [n + m] • 任何代数到它商代数的同态都用这种方式定义
2.4 同态和初始性 • 例 含义函数是从项代数T= Terms(, )到任意代数 A的一个同态h :T A。如果是A的一个满足 的环境,该同态的定义是 h(M) = AM • 这是一个同态,因为 h (f M1 … Mk ) = Af M1 … Mk = fA(AM1,…, AMk) = fA(h (M1), …, h (Mk) )
2.4 同态和初始性 • 引理2.13 令h :AB是任意同态,并且是满足类别指派 的任意A环境。那么对任何项MTerms(, ),有 h(AM) = BMh 当M中不含变量时,h(AM) =BM • 证明 基于项的归纳 • 引理2.14 如果h :AB和k :B C都是代数的同态,那么 合成kh :AC也是代数的同态, (k h)s = kshs • 同构 一个双射的同态, 写成A B
2.4 同态和初始性 B1 A B2 B3 2.4.2 初始代数 • C是一类代数并且AC,若对每个BC,存在唯一的同态h : AB,则A在C中叫做初始代数 • 初始代数是“典型”的 • 初始代数有尽可能少的非空载体 • 初始代数满足尽可能少的闭等式
2.4 同态和初始性 • 例 基调0 • 类别nat, • 函数符号0 : nat和S : nat nat • 令C是所有0代数构成的代数类 • 闭项代数T Terms(0, )是C的初始代数 它的载体是所有闭项0, S(0), …, Sk(0), … 该代数的函数S把Sk(0)映射到Sk1(0) 该代数的元素少到能解释所有的函数符号 该代数满足项之间尽可能少的等式
2.4 同态和初始性 • 引理2.15 假定h : AB和k : BA都是同态,并且 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的代数有唯一的同态
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
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,则得一个初始代数 • 这个初始代数和该基调的标准模型(有后继算子和加法的自然数)同构
2.4 同态和初始性 • 初始代数和其他代数的比较 1、和有更多元素的代数比较 • 多余的元素不能由项定义(有垃圾) 例1:整数代数Z 例2: A = Anat, 0A, SA, +A Anat = (0 N) ({1} Z) 0A = 0, 0 SAi, n = i, n +1 i, n +Aj, m = max(i, j), n+m