收藏 分享(赏)

形式语义学-Lambda演算.ppt

上传人:hskm5268 文档编号:7800659 上传时间:2019-05-26 格式:PPT 页数:64 大小:673KB
下载 相关 举报
形式语义学-Lambda演算.ppt_第1页
第1页 / 共64页
形式语义学-Lambda演算.ppt_第2页
第2页 / 共64页
形式语义学-Lambda演算.ppt_第3页
第3页 / 共64页
形式语义学-Lambda演算.ppt_第4页
第4页 / 共64页
形式语义学-Lambda演算.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、形式语义学,Formal Semantics of Programming Languages2011.09,第二章 函数式抽象描述方法,2.1 论域理论基础 2.2 Lambda演算 2.3 函数式抽象语言 2.4 函数式抽象语言的应用,2019/5/26,2,第二章 函数式抽象描述方法,2.2 Lambda演算( calculus) 2.2.1 Lambda演算介绍 2.2.2 Lambda演算作为计算模型 2.2.3 Lambda演算系统的扩充,2019/5/26,3,引言,欧美等大学大都将函数式语言作为第一门程序设计语言 函数式语言与过程式语言的区别 强调值的概念:有什么类型就有什么值

2、,高阶值; 运算的并行性:运算分量,函数实参表达式都可并行计算; 引用透明性: 计算的延迟性: 支持模式和模式匹配; 函数式语言具有比命令式语言更高的数学抽象力,因此在描述某些算法的时候更精炼和严格;,2019/5/26,4,引言,函数式语言不仅可用于程序设计,还可用于算法、编译器、解释器的抽象描述,以及指称语义的定义等方面。本课程将分两个部分介绍函数式语言 无类型的函数式语言 Lambda演算( calculus) 有类型的函数式语言 类似ML, 通用描述方法,2019/5/26,5,引言,首先在1941年由Church作为一个可计算模型的精确定义给出的; 语法简单而又有强大的描述能力; 已

3、被证明其描述能力等价于图灵机; 可以描述任何一个部分递归函数的计算过程; 是指称语义描述语言和函数式语言的理论基础; LISP语言就是基于Lambda演算 (John McCarthy)设计的。,2019/5/26,6,2.2 Lambda演算,主要内容 2.2.1 Lambda演算介绍 表达式 自由变量 free variables(FV) 替换 substitution 变换规则 conversion rules 归约 reduction 2.2.2 Lambda演算作为计算模型 2.2.3 Lambda演算系统的扩充,2019/5/26,7,2.2.1 Lambda演算介绍,Lambda

4、演算可看作是一个简单的语义清楚的形式语言;可以用来解释复杂的程序设计语言或者计算模型;Lambda演算通常包括两个部分: 合法表达式(表达式 )的形式系统 (语法) 变换规则的形式系统 (语义),2019/5/26,8,2019/5/26,9,表达式 (1)定义,一个表达式由变量名、抽象符号,.以及(,)等符号构成,其语法为::= | | . | ( ) 没有类型;没有常量; 变量名不仅可以代表变量,还可以代表函数;,2019/5/26,10,表达式 (2)施用型和抽象型,施用型表达式(APPLY): E1 E2 - 函数调用,E1是函数定义, E1是实参 抽象型表达式(Abstraction

5、) : x .E - 无名函数定义,x对应形参,E是函数体 举例: x x; x.xy ; x (y.xy ) ; x.y.x ;,2019/5/26,11,表达式 (3)记法约定,施用型表达式的左结合规则:E1 E2 E3 En = (E1 E2 ) E3) En 抽象型表达式的右结合规则: x1. x2. xn. E = x1. (x2. ( (xn. E ) ) ) x1 x2 xn . E = x1. x2. xn. E x1. x2. xn. E1 E2 E3 Em = x1. x2. xn. ( E1 E2 E3 Em ),2019/5/26,12,表达式 (4)子表达式,子表达式

6、(针对不同的表达式形式) 设E是一个表达式,则E的子表达式可以定义为: E x ,x就是E的子表达式; E E1 E2 , E1和E2以及它们的子表达式都是E的子表达式; E x. E, x. E以及E的子表达式都是E的子表达式; E (E), E及其子表达式都是E的子表达式; 用SUB (E)来表示E的子表达式集;,2019/5/26,13,表达式 (5)作用域,表达式中变量的作用域: x. E表达式中的变量x是被绑定的,它的作用域是体表达式 E 中去掉所有形如x. E子表达式后的表达式部分; x. E表达式中x.部分可以看作是变量x的定义点,在 E 中x的定义域中出现变量x为其使用点; 举

7、例: 表达式:y (x y. y (x. x y ) ) (z (x. x x) )x 的作用域是 y; y的作用域是 y (x. x y ) ; x 的作用域是 x y ;x的作用域是 x x;,2019/5/26,14,表达式 (6)自由出现,在表达式中相同的变量名,可以出现在表达式的不同的位置,它们的含义可能不同; 自由出现/约束出现:表达式E中变量名x的一次出现称为自由出现,如果E中任何一个形如x. E的子表达式不包含该出现;如果存在一个x. E的子表达式包含该出现,称为约束出现; y (x y. y (x. x y ) ) (z (x. x x) )自由 约束 约束 自由 约束 出现

8、 出现 出现 出现 出现,2019/5/26,15,表达式 (7) 自由变量,自由变量:称x为表达式E的自由变量,如果E中至少包含一个x的自由出现; 需要区分的概念: 变量:,定义点确定 变量名:标识符 变量的出现: 自由变量集合:用FV(E)表示E的自由变量集合,则其具体定义为: E x , FV(x) = x ; E E1 E2 ,FV(E1 E2 ) = FV(E1) FV(E2) ; E x. E,FV(x. E) = FV(E) x ; E (E), FV(E) = FV(E),2019/5/26,16,表达式(8)-计算自由变量集合例子,表达式E = y (x y. y (x. x

9、 y ) ) (z (x. x x) ) FV(E) = FV(y (x y. y (x. x y ) ) ) FV (z (x. x x) ),= FV(y) FV( (x y. y (x. x y ) ) ) FV (z) FV (x. x x) ),= y ( FV(y (x. x y ) )-x,y) z ( FV (x x) - x),= y, z,2019/5/26,17,表达式 (9),封闭型表达式: 如果一个表达式E不包含自由变量,即 FV(E) = , 则称E为闭型表达式;开型表达式: 如果一个表达式E包含自由变量,即 FV(E) , 则称E为开型表达式;,2019/5/26

10、,18,表达式 (10) 替换,替换:设E和E0是表达式,x是变量名,替换EE0/x是表示把E中所有x的自由出现替换成E0。 Substitution,代换(替换),表示形式有多种: E0/xE ; E0/x,E; xE0,E; EE0 /x EE0/x的计算规则为: S1: E x , xE0 /x = E0 ; S2: E y , yE0 /x = y ,x y ; S3: E (E), (E) E0 /x = E E0 /x S4: E E1 E2,E1E2E0/x = (E1E0/x) (E2E0/x); S5: E x. E, x. EE0/x = x.E ;,2019/5/26,1

11、9,表达式 (10) 替换,E y.E, xy, E0中没有y的自由出现,那么直接对E进行替换 S6:如果yFV(E0),则(y. E)E0/x = y. (E E0/x)(y. E)中的y和E0中的y是不同的;E中没有x的自由出现,则表示E没有可替换 S7:如果xFV(E) ,则 (y.E)E0/x = y.(E E0/x) = y.E,2019/5/26,20,表达式 (10) 替换,E y. E, xy, E0中有y的自由出现,E中有可替换的x,则需要对y进行改名,改变后的变量名z是不同于y的E0的非自由出现。 S8:如果yFV(E0) xFV(E),则(y. E) E0/x = z.(

12、E z/y)E0/x), zFV(E0), z y 只有自由出现的变量才允许被替换,而且替换不应该把变量的自由出现变为约束出现。 要避免出现 ( y. x+y) y/x = ( y. y+y), 正确的替换,自动改名:( y. x+y) y/x = z. y+z,2019/5/26,21,表达式 (11) 替换例子,x xy/x = xy S1y M/x = y S2 x.xy E/x = x.xy S3;S5 x.xz w/y = x.xz S7,2019/5/26,22,表达式 (11) 替换例子, x.xy b.xy a.ab/y = x.xy a.ab/y b.xya.ab/y S4

13、= x.xa.ab z.xyz/ba.ab/y S6;S8 = x.xa.ab z.xy a.ab/y S7 = x.xa.ab z.x a.ab S6,2019/5/26,23,已经介绍,Lambda演算的语法 表达式形式定义 相关的一些概念 子表达式 作用域规则 自由变量 替换:是Lambda演算中最重要的一个概念;后面定义的转换系统都是基于替换的;,2019/5/26,24,Lambda演算通常包括两个部分:合法表达式(表达式)的形式系统 (语法) 语法结构; 自由变量; 替换变换规则的形式系统 (语义),2019/5/26,25,Lambda演算的变换系统 1,变换系统给出了如何从一个

14、表达式转换成和其等价的另外一个表达式; 实际上给出了一种计算规则; 不同的Lambda演算系统有不同的变换规则; 变换规则是保结构和保值的; 变换系统定义了Lambda演算的语义;,2019/5/26,26,Lambda演算的变换系统2 - 变换,变换:设E是表达式,x是变量,则称下面变换为变换(其中y不在 FV( x.E )中)x.E y.(E y/x) 变换只是改变了x.E型表达式的形参名; x.x+y、z.z+y、w.w+y在变换下是等价的,它们定义的是同一个函数; 条件:新的形参不是体表达式的自由变量,否则会改变函数的含义;,2019/5/26,27,Lambda演算的变换系统2 -

15、变换例子,合法的变换 X.(ZX) Y.(ZY) X.(Y.YX)X) Z.(Y.YZ)Z)非法的变换 X.(Z(Y.X) Y.(Z(Y.Y ) X.(ZY) Y.(ZY),2019/5/26,28,Lambda演算的变换系统 3 - 变换,变换:设 (x.E)和E0为表达式,则称下面变换为变换(称变换规则的左部表达式为基)(x.E)E0 EE0/x 变换是最重要的一个变换 ,所有不同 Lambda 演算系统都有这一变换。 变换规则实际上是定义了函数调用的语义,2019/5/26,29,Lambda演算的变换系统 4 - 变换的例子,(X.XY)X XY (X.XX)Y YY (X.(Y.(Z

16、.XYZ)ABC (Y.(Z.AYZ)BC(Z.ABZ) C ABC,2019/5/26,30,Lambda演算的变换系统 5 - 变换,变换:假设x.Mx是一个表达式,且满足条件xFV(M),则称下面变换为变换:(x.M x) M 主要依据是函数的外延(保值)等价性定义,即 如果对于任意x,都有f(x)=h(x),则我们认为f和h等价; 对于任意y, xFV(M),(x.Mx)y My 变换不是演算系统所必需的变换规则,2019/5/26,31,Lambda演算的变换系统 6 - 变换的例子,合法变换X.( Y.YY) X (Y.YY) 非法变换 X.(Y.YX) X (Y.YX)不满足条件

17、: XFV(Y.YX),2019/5/26,32,Lambda演算的变换系统 7 - 归约,归约基: (1)变换的左部表达式(x.E)E0称之为基。 (2)变换的左部表达式(x.Mx)称之为基。 (3)把基和基统称为归约基。 归约:对表达式中的某一归约基施行某种变换称之为归约 ; 一个表达式中可以同时有多个归约基; 归约过程不唯一; 不同的归约过程得到的结果不一定相同;,2019/5/26,33,Lambda演算的变换系统 8 - 归约过程例子,举例不同的归约过程得到相同的结果: 表达式:(y.y(a.xa)(a.a)(b.b) 归约过程 1:(y.y(a.xa)(a.a)(b.b)(y.y(

18、x(a.a)(b.b)(b.b)(x(a.a) x(a.a),2019/5/26,34,Lambda演算的变换系统 8 - 归约过程例子,举例不同的归约过程得到相同的结果: 表达式:(y.y(a.xa)(a.a) )(b.b) 归约过程 2:(y.y(a.xa)(a.a)(b.b)(b.b)(a.xa)(a.a) (a.xa)(a.a) x(a.a),2019/5/26,35,Lambda演算的变换系统 8 - 归约过程例子,举例不同的归约过程得到相同的结果: 表达式:(y.y(a.xa)(a.a) )(b.b) 归约过程 3:(y.y(a.xa)(a.a)(b.b)(y.y(x(a.a)(b

19、.b)(b.b)(x(a.a)x(a.a),2019/5/26,36,Lambda演算的变换系统 8 - 归约过程例子,举例不同的归约过程得到不同的结果: 表达式:(x.y)(x.xx)(x.xx) 归约过程 1:(x.y)(x.xx)(x.xx)y,2019/5/26,37,Lambda演算的变换系统 8 - 归约过程例子,举例不同的归约过程得到不同的结果: 表达式:(x.y)(x.xx)(x.xx) 归约过程 2:(x.y)(x.xx)(x.xx)(x.y)(x.xx)(x.xx)(x.y)(x.xx)(x.xx),2019/5/26,38,Lambda演算的变换系统 9 - 范式,范式:

20、假设E是一个表达式,且其中没有任何一个归约基,则称该表达式为范式。如果一个表达式经过有限次变换能归约成范式,则称该表达式有范式. 举例:X , XX , X.XX , X(X.XX) , X.X(Y.XY),X.X(Y.X)Y)不是范式,因为有归约基(Y.X)Y) 表达式有很多,范式是具有相同解释的最简表示;,2019/5/26,39,Lambda演算的变换系统 10 - 范式的性质,归约过程不唯一; 表达式不一定都有范式; 范式的唯一性:如果有范式则在变换下一定唯一。 范式的存在性:如果有范式,则最左归约法一定能求出范式。 标准归约:最左归约,按归约基中符号的出现顺序,每次归约最左边的归约基

21、; 表示法: XY :经过有限次变换(,),X变换为Y。 Xr Y :经过有限次归约(,),X变换为Y。 XY :经过有限次变换,X变换为Y。,2019/5/26,40,Lambda演算的变换系统 11 - 范式的归约过程举例,归约过程 2:(y.y(a.xa)(a.a)(b.b)(b.b)(a.xa)(a.a) (a.xa)(a.a) x(a.a),2019/5/26,41,归约2,归约1,不同的归约过程得到不同的结果,(x.y) (x.xx) (x.xx),归约1,y(x.xx)(x.xx) /x,y,归约2,(x.y)(x.xx)(x.xx),(x.y)(x.xx)(x.xx),2019

22、/5/26,42,演算总结,需要掌握的知识点 表达式 自由变量 替换 三种变换 归约 范式 范式的唯一性 范式的存在性,第二章 函数式抽象描述方法,2.2 Lambda演算( calculus) 2.2.1 Lambda演算介绍 2.2.2 Lambda演算作为计算模型 2.2.3 Lambda演算系统的扩充,2019/5/26,43,2019/5/26,44,2.2.2 Lambda演算作为计算模型,Lambda演算通常包括两个部分: 合法表达式(表达式) 变换规则:变换;变换;变换 变换规则的作用是推导出范式 Lambda演算可以描述复杂计算,是等价于Turing机计算模型;描述能力强;

23、可以用Lambda演算描述:数、标准函数、复合函数、复杂函数,2019/5/26,45,2.2.2 Lambda演算作为计算模型,本节内容包括:用Lambda演算模拟整数 用Lambda演算模拟加法运算了解Lambda演算的描述能力,2019/5/26,46,用Lambda演算模拟整数,正整数 n 的表达式:n = ab.a(a( (a(ab)n个 简写为: ab.anb 0的表达式: 0 = ab.b 1的表达式: 1 = ab.ab 2的表达式: 2 = ab.a(ab)= ab.a2b,2019/5/26,47,用Lambda演算模拟加法运算,加法的表达式:PLUS = xy.ab.(x

24、 a)(y a)b) 验证方法:PLUS m n =m+n,PLUS m n = (xy.ab.(xa)(ya)b) m n=(y.ab.(m a)(ya)b) n= ab.(m a)(n a)b)= ab.(ab.amb ) a)(n a)b)= ab.(b.amb)(ab.anb)a)b)= ab.(b.amb)(b.anb)b)= ab.(b.amb)(anb)= ab.(amanb) = ab.(am+n b) = m+n,2019/5/26,48,书中的其他例子,乘法 布尔值 true 和 false; 布尔运算AND, OR, NOT 减法;比较运算; 条件函数 最小不动点算子,第

25、二章 函数式抽象描述方法,2.2 Lambda演算( calculus) 2.2.1 Lambda演算介绍 2.2.2 Lambda演算作为计算模型 2.2.3 Lambda演算系统的扩充,2019/5/26,49,2019/5/26,50,2.2.3 Lambda演算系统的扩充,最基本的Lambda演算,具有很强描述能力; 使用起来很不方便; 扩充的方法: 扩充表达式 常数:布尔常量true和false; 整数 引进标准函数:add, mul, and, or, equ 其他:条件表达式 扩充变换系统 扩充数据类型:INT, BOOL, REAL ,2019/5/26,51,2.2.3 La

26、mbda演算系统的扩充,一种扩充的表达式E := false | true | n 常量| x | f 变量/函数 | E | E1 E2 施用型| x.E 抽象型| E0 E1,E2 条件函数| let x = E0 in E let表达式| letrec x = E0 in E letrec表达式,-52-,let x=E0 in E1解释: “令E1中变量x的值为E0的值”。 假设有表达式f(h(a,b),h(a,b),则可把它简化成let x =h(a,b) in f(x,x)。 let表达式的精确含义可描述如下: (let x=E0 in E1)= (x. E1) E0 扩充后的演算

27、有两种变量,一是变量,一是let变量。其中变量相当于过程式语言中的形参变量,而let变量则相当于过程体内的临时变量。,-53-,let表达式也可定义函数(let变量的值可以是一个函数)。 例:let u =xy.(add x (sub y 1) in u 2 3let u =xy.(add x (sub y 1) in u 2 3= (u.u 2 3)( xy.add x (sub y 1) = (xy.add x (sub y 1) 2 3= (y.add 2 (sub y 1) 3= add 2 (sub 3 1)= add 2 2 = 4,2019/5/26,54,Lambda演算通常包

28、括两个部分: 合法的表达式 (语法) 表达式的语法定义; 作用域规则; 自由变量; 替换; 变换规则的形式系统 (语义) 三种变换 变换基 归约,2.2.1 Lambda演算(语言)介绍 内容回顾,2019/5/26,55,表达式的语法定义;E := x | E1 E2 | x.E | (E) 作用域: x.E 将变量x 绑定,使其仅在E中有效; 由于表达式可以嵌套,所以变量作用域也是嵌套的; 类似于PASCAL语言的嵌套过程定义,导致嵌套变量作用域;,2.2.1 Lambda演算(语言)介绍 内容回顾,2019/5/26,56,自由变量: 表达式中同一个变量可以有多个出现; 没有被任何抽象声

29、明x.所绑定的变量x的出现,称为变量x的自由出现; 至少有一个自由出现的变量,称为自由变量; 替换: EE0/x, 将对E中的每个X的自由出现替换成E0 ,从而得到一个新的表达式。,2.2.1 Lambda演算(语言)介绍 内容回顾,2019/5/26,57,变换系统: 变换: x.E y.Ey/x,其中y不在FV( x.E )中;变换: (x.E)E0 EE0/x变换:(x.M x) M , 其中xFV(M),2.2.1 Lambda演算(语言)介绍 内容回顾,2019/5/26,58,Lambda演算的变换系统,变换系统给出了如何从一个表达式转换成和其等价的另外一个表达式; 实际上给出了一

30、种计算规则; 不同的Lambda演算系统由不同的变换规则; 变换规则是保结构和保值的; 变换系统定义了Lambda演算的语义;,2019/5/26,59,Lambda演算的变换系统 7 - 归约,归约基: (1)变换的左部表达式(x.E)E0称之为基。 (2)变换的左部表达式(x.Mx)称之为基。 (3)把基和基统称为归约基。 归约:对表达式中的某一归约基施行某种变换称之为归约 ; 一个表达式中可以同时有多个归约基; 归约过程不唯一; 不同的归约过程得到的结果不一定相同;,2019/5/26,60,Lambda演算的变换系统 8 - 归约过程例子,举例不同的归约过程得到相同的结果: 表达式:(

31、y.y(a.xa)(a.a)(b.b) 归约过程 1:(y.y(a.xa)(a.a)(b.b)(y.y(x(a.a)(b.b)(b.b)(x (a.a) x(a.a),2019/5/26,61,Lambda演算的变换系统 8 - 归约过程例子,举例不同的归约过程得到相同的结果: 表达式:(y.y(a.xa)(a.a) )(b.b) 归约过程 2:(y.y(a.xa)(a.a)(b.b)(b.b)(a.xa)(a.a) (a.xa)(a.a) x(a.a),2019/5/26,62,Lambda演算的变换系统 9 - 范式,范式:假设E是一个表达式,且其中没有任何一个归约基,则称该表达式为范式。

32、如果一个表达式经过有限次变换能归约成范式,则称该表达式有范式. 举例:X , XX , X.XX , X(X.XX) , X.X(Y.XY),X.X(Y.X)Y)不是范式,因为有归约基(Y.X)Y) 范式是具有相同解释的表达式的最简表示; 表达式不一定都有范式,如: (X.XX) (X.XX) (X.XX) (X.XX),2019/5/26,63,Lambda演算的变换系统 10 - 范式的性质,范式的唯一性: 如果有范式则在变换下一定唯一。 范式的存在性: 如果有范式,则最左归约法一定能求出范式。 标准归约: 最左归约,按归约基中符号的出现顺序; 表示法: XY :经过有限次变换(,),X变换为Y。 Xr Y :经过有限次归约(,),X变换为Y。 XY :经过有限次变换,X变换为Y。,2019/5/26,64,演算总结,需要掌握的知识点 表达式 自由变量 替换 三种变换 归约 范式 范式的唯一性 范式的存在性,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报