形式语义学-Lambda演算
lambda演算

//3 = λf. λx.f (f (f x))
= λf. λx.(( λf. λx.f (f (f x))))f )(f (f x))
//将f 和(f (f x))应用于f 和x上
= λf. λx.(f (f (f (f (f x)))))
//正好等于5的邱奇数定义
邱奇-图灵论题(又称邱奇-图灵猜想,邱奇论题,邱奇猜想,图灵论题) 是一个关于可计算性理论的假设。该假设论述了关于函数特性的,可有效 计算的函数值(用更现代的表述来说–在算法上可计算的)。简单来说,邱 奇-图灵论题认为“任何在算法上可计算的问题同样可由图灵机计算”。 20世纪上半叶,对可计算性进行公式化表示的尝试有:
龙国星海 (山海螄)
λ 演算
March 23, 2016 9 / 17
λ演算
λ演算的定义 归约
在 λ 演算中有许多方式都可以定义自然数,但最常见的还是邱奇数
Church数 邱奇编码是把数据和运算符嵌入到λ演算内的一种方式,它是使用λ符 号的自然数的表示法。这种方法得名于阿隆佐·邱奇,他首先以这种方 法把数据编码到λ演算中。
0 ≡ λf. λx.x 1 ≡ λf. λx.f x 2 ≡ λf. λx.f (f x) 3 ≡ λf. λx.f (f (f x)) n ≡ λf. λx.f nx
在λ演算中,计算系统用数f 作为参数并以f 的n次幂为返回值的 函数
龙国星海 (山海螄)
λ 演算
March 23, 2016 11 / 17
λ演算
λ演算的定义 归约
PLUS 3 2 = λm. λn. λf. λx.((mf )((nf )x))3 2
//将3和2应用于m,n这两个自由变量
lamberda表达式

lamberda表达式
“Lamberda表达式”这个术语可能是一个拼写错误或者误传。
在计算机科学或其他领域中,并没有广泛使用“Lamberda表达式”这个术语。
也许你想问的是关于Lambda表达式吗?Lambda表达式是一种匿名函数,它允许我们将函数作为参数传递给其他函数,或者在集合操作中使用。
Lambda表达式通常用于函数式编程语言或者支持函数式编程范式的语言中,比如Java、Python、C#等。
Lambda表达式的一般形式是,(parameters) -> expression 或者 (parameters) -> { statements }。
其中,parameters 是函数的参数,箭头 -> 用于分隔参数和表达式或者语句块。
表达式或者语句块是函数的实现部分。
Lambda表达式的优点在于它可以简洁地表示匿名函数,使得代码更加简洁和易读。
它通常用于函数式接口或者需要函数作为参数的方法中,比如在Java 8中的Stream API中经常会使用Lambda表达式来进行函数式编程。
总的来说,Lambda表达式是一种强大的工具,它使得函数式编
程范式在支持的语言中变得更加便利和灵活。
希望这个回答能够解答你的疑惑。
如果你有其他问题,也欢迎继续提问。
lambda演算主要语法规则、演算规则

lambda演算主要语法规则、演算规则Lambda演算是一种计算模型,也是一种形式系统,它以函数的定义和应用为基本操作,用于研究计算和计算机科学的基本概念。
本文将介绍Lambda演算的主要语法规则和演算规则。
一、主要语法规则1. 变量:Lambda演算中的变量是用小写字母表示的,例如x、y、z等。
2. 抽象:抽象是Lambda演算中定义函数的方式。
它的语法形式为λx.E,其中λ表示抽象的开始,x表示函数的参数,E表示函数体。
例如,λx.x表示一个将参数x映射到自身的函数。
3. 应用:应用是Lambda演算中调用函数的方式。
它的语法形式为E1 E2,其中E1是函数,E2是函数的参数。
例如,(λx.x) y表示将参数y应用到函数λx.x上。
二、演算规则1. α-变换规则:α-变换是指改变抽象中的参数名,以避免命名冲突。
例如,λx.E可以通过α-变换规则变为λy.E[y/x],其中E[y/x]表示将E中的所有x替换为y。
2. β-规约规则:β-规约是指应用函数时,将函数体中的参数替换为实际参数的过程。
例如,(λx.E) v可以通过β-规约规则变为E[v/x],其中E[v/x]表示将E中的所有x替换为v。
3. η-规约规则:η-规约是指将抽象中的函数体改写为更简洁的形式。
例如,λx.(E x)可以通过η-规约规则变为E,其中E表示函数体中的表达式。
4. 自由变量:自由变量是指在函数体中未被绑定的变量。
在进行演算时,需要注意自由变量的约束。
Lambda演算的语法规则和演算规则非常简洁和精确,能够描述和推导各种计算和计算机科学问题。
以下是一个简单的例子来说明Lambda演算的应用。
假设有一个函数f,它将一个数字加1。
在Lambda演算中,可以使用抽象和应用的方式定义这个函数。
首先,定义一个函数addOne,表示将参数x加1。
它的Lambda表示形式为λx.(x + 1)。
然后,定义函数f,它将参数y应用到addOne函数上,即f = addOne y。
Lambda

Lambda演算Lambda演算是一个形式系统,它被设计出来用来研究函数定义,函数应用和递归。
它是在二十世纪三十年代由Alonzo Church 和 Stephen Cole Kleene发明的。
Church在1936年使用lambda演算来证明了判定问题是没有答案的。
Lambda演算可以用来清晰的定义什么是一个可计算的函数。
两个lambda演算表达式是否相等的问题不能够被一个通用的算法解决,这是第一个问题,它甚至排在停机问题之前。
为了证明停机问题是没有答案的,不可判定性能够被证明。
Lambda演算对于函数式编程语言(例如lisp)有重大的影响。
同时,数理逻辑中对于lambda演算的介绍就简单得多:λ-演算可以说是最简单、最小的一个形式系统。
它是在二十世纪三十年代由Alonzo Church 和Stephen Cole Kleene发明的。
至今,在欧洲得到了广泛的发展。
可以说,欧洲的计算机科学是从λ-演算开始的,而现在仍然是欧洲计算机科学的基础,首先它是函数式程序理论的基础,而后,在λ-演算的基础上,发展起来的π-演算、χ-演算,成为近年来的并发程序的理论工具之一,许多经典的并发程序模型就是以π-演算为框架的。
这里不由得想起一位我尊敬的老师的博士毕业论文就是关于π-演算的,可惜这位老师已经去别的学校了。
Lambda演算表达了两个计算机计算中最基本的概念“代入”和“置换”。
“代入”我们一般理解为函数调用,或者是用实参代替函数中的形参;“置换”我们一般理解为变量换名规则。
后面会讲到,“代入”就是用lambda演算中的β-归约概念。
而“替换”就是lambda演算中的α-变换。
Lambda演算系统的形式化定义维基百科全书上面的对于lambda演算的定义不是很正规,但是说明性的文字较多。
而数理逻辑中的定义很严密,不过没有说明不容易理解。
我尽可能把所有资料结合起来说明lambda演算系统的定义。
字母表lambda演算系统中合法的字符如下:1. x1,x2,x3,…变元(变元的数量是无穷的,不能在有限步骤内穷举,这个很重要,后面有定理是根据这一点证明的)2. à 归约3. =等价4. λ,(,)(辅助工具符号,一共有三个,λ和左括号右括号)所有能够在lambda演算系统中出现的合法符号只有以上四种,其他符号都是非法的。
lambda演算实例

lambda演算实例关于lambda演算的定义和解释的确有点让人迷糊,主要不是因为lambda演算有多复杂,而是一些基本概念没有归入正确位置的原因。
这里先写一点草稿,在实践中学习和领悟lambda演算到底是个什么东西。
一:自然数运算:在lambda演算中的邱奇数定义0 = λf.λx.x1 = λf.λx.f x2 = λf.λx.f (f x)3 = λf.λx.f (f (f x))SUCC = λn.λf.λx.f(n f x)SUCC是一个有三个自由变量的函数计算SUCC 0=λn.λf.λx.f (n f x) 0 //将0代入n=λf.λx.f (0 f x) //0=λf.λx.x=λf.λx.f (λf.λx.x f x) //λf.λx.x f x是将两个参数的函数λf.λx.x应用于(f x)这两个值的结果,结果等于x=λf.λx.f x //正好等于1的邱奇数定义SUCC 1=λn.λf.λx.f (n f x) 1 //将1代入n=λf.λx.f (1 f x) //0=λf.λx.x=λf.λx.f (λf.λx.(f x) f x) //λf.λx.(f x) f x是将两个参数的函数λf.λx.(f x)应用于(f x)这两个值的结果,结果等于(f x)=λf.λx.f (f x) //正好等于2的邱奇数定义小节:不妨把lambda演算看做一个自动机,你输入一个式子(一个λ项),它就给你输出一个演算结果,至于输入和输出有什么意义,是我们自己赋予的。
比如为了计算0的后继,我们只是输入(λn.λf.λx.f(n f x) λf.λx.x)给这个机器,这个机器就会给我们输出λf.λx.f x。
在解释这个输入输出关系时,我们会说,SUCC 0 = 1,这样就赋予这个运算一个意义。
这个自动机知道自己在做加1操作吗?其实它什么也不知道。
为什么邱奇数这样定义?其实不妨把它们看做是被偶然发现的一些λ项,这些λ项的组合项的演算结果恰好能对应于自然数的运算而已。
形式语义学Lambda演算.ppt

2020/1/24
21
表达式 (11)– 替换例子
x.xy b.xy [a.ab/y]
= x.xy [a.ab/y] b.xy[a.ab/y] S4
= x.xa.ab z.xy[z/b][a.ab/y] S6;S8
= x.xa.ab z.xy [a.ab/y]
9
表达式 (2)施用型和抽象型
施用型表达式(APPLY):
E1 E2 -- 函数调用,E1是函数定义, E1是实参
抽象型表达式(Abstraction) :
x .E --- 无名函数定义,x对应形参,E是函数体
举例:
x x;
x.xy ;
x (y.xy ) ;
设E是一个表达式,则E的子表达式可以定义为: E x ,x就是E的子表达式; E E1 E2 , E1和E2以及它们的子表达式都是E的
子表达式; E x. E’, x. E’以及E’的子表达式都是E的子
表达式; E (E’), E’及其子表达式都是E的子表达式;
合法的变换 X.(ZX) Y.(ZY)
X.((Y.YX)X) Z.((Y.YZ)Z)
非法的变换 X.(Z(Y.X)) Y.(Z(Y.Y )) X.(ZY) Y.(ZY)
2020/1/24
27
Lambda演算的变换系统 3 -- 变换
S8:如果yFV(E0) xFV(E’),则 (y. E’)[ E0/x] = z.((E’ z/y])[E0/x]), zFV(E0), z y
只有自由出现的变量才允许被替换,而且替换不应 该把变量的自由出现变为约束出现。
要避免出现 ( y. x+y) [y/x] = ( y. y+y),
lambda演算 参考书
lambda演算参考书摘要:mbda 演算的定义与背景mbda 演算的基本概念和符号mbda 演算的应用领域4.参考书籍推荐正文:lambda 演算是一种计算模型,由Alonzo Church 于1936 年提出,旨在解决数学中的函数定义和计算问题。
这种演算基于函数定义和计算,以简洁的形式描述了函数的抽象概念。
在计算机科学和数学领域,lambda 演算有着广泛的应用。
mbda 演算的定义与背景Lambda 演算是一种形式化的计算模型,通过一些简单的语法规则和符号表示,来描述和实现计算过程。
在lambda 演算中,有两个基本的符号:λ和μ。
其中,λ表示匿名函数,μ表示函数应用。
通过这两个符号,可以表示和计算各种复杂的数学函数。
mbda 演算的基本概念和符号在lambda 演算中,函数被看作是一个表达式,它接受一些输入参数,并返回一个输出结果。
函数的定义和计算过程都遵循一定的规则。
例如,一个简单的函数定义可以表示为:λx.f(x),表示一个接受一个参数x 的函数,其计算结果为f(x)。
而函数的计算过程则通过μ符号表示,如:μx.f(x) 表示将函数应用到参数x 上,即计算f(x) 的结果。
mbda 演算的应用领域Lambda 演算在计算机科学和数学领域有着广泛的应用。
在编程语言的设计和实现中,lambda 演算提供了一种简洁的方法来表示匿名函数,如Python 中的lambda 函数。
此外,lambda 演算还为函数式编程提供了理论基础,如Haskell 等函数式编程语言。
在数学领域,lambda 演算被用于研究函数的性质和计算复杂性等问题。
形式语义学Lambda演算PPT课件
用SUB (E)来表示E的子表达式集;
2020/7/27
13
表达式 (5)—作用域
表达式中变量的作用域:
x. E表达式中的变量x是被绑定的,它的作用域是体 表达式 E 中去掉所有形如x. E’子表达式后的表达 式部分;
x. E表达式中x.部分可以看作是变量x的定义点, 在 E 中x的定义域中出现变量x为其使用点;
= x1. x2. … xn. ( E1 E2 E3 … Em )
2020/7/27
12
表达式 (4)—子表达式
子表达式(针对不同的表达式形式)
设E是一个表达式,则E的子表达式可以定义为: E x ,x就是E的子表达式; E E1 E2 , E1和E2以及它们的子表达式都是E的
子表达式; E x. E’, x. E’以及E’的子表达式都是E的子
2020/7/27
15
表达式 (7)– 自由变量
自由变量:称x为表达式E的自由变量,如果E中至少
包含一个x的自由出现;
需要区分的概念:
变量:<变量名,含义>,定义点确定
变量名:标识符
变量的出现:<变量名,位置>
自由变量集合:用FV(E)表示E的自由变量集合,则其 具体定义为:
E x , FΒιβλιοθήκη (x) = {x} ;2020/7/2因7 此在描述某些算法的时候更精炼和严格;
5
引言
函数式语言不仅可用于程序设计,还可 用于算法、编译器、解释器的抽象描述 ,以及指称语义的定义等方面。
本课程将分两个部分介绍函数式语言
无类型的函数式语言 – Lambda演算( calculus) 有类型的函数式语言 – 类似ML, 通用描述方法
计算理论6章 Lambda演算模型
类型系统 (表示类型上下文)
x: T ├ x: T
├ x: T1,├ y:T2
, y:T2 ├ x:T1
├ x: T1, ├ E: T2 ├ x:T. E : T1 T2
├ E1: T1 T2, ├ E2:T1 ├ E1E2: T2
2 纯Lambda演算实例
逻辑运算
布尔值 T = a.b.a F = a.b.b
布尔运算 and = x.y. x y F or = x. y. x T y not = x. x F T
2 纯Lambda演算实例
and T T = T T F = (ab. a) T F =T
or T F = T T F = (ab. a) T F =T
扩展-表达式 扩展-变换规则 扩展数据类型
3 纯Lambda演算的扩展
扩展-表达式 E ::= true | false | n | f | x | E1 E2 | x.E | (E) | (E0 E1, E2 ) | let x= E0 in E
3 纯Lambda演算的扩展
带类型Lambda演算
y
1 纯Lambda演算理论
定义6. 最左归约
依据归约基中符号出现的顺序进行的归约称 为最左归约。也称标准归约。
Church-Rosser定理
Lambda表达式若有范式则一定唯一,并且按 最左归约一定能求到该范式。
2 纯Lambda演算实例
实例
整数运算 逻辑运算 关系运算
2 纯Lambda演算实例
MINUS m n = m-n n <m 0 否则
2 纯Lambda演算实例
lambda-calculus
Lambda-演算在形式语义学的中应用1傅庆芳1.形式语义学与组合原则自Chomsky创立生成语法(generative grammar)以来,人们开始普遍承认语法是可以按组合原则逐步生成的。
生成语法的一个基本出发点是:自然语言中存在无穷多的句子,同时大脑的功能是有限的,所以我们的语言能力必须包含某种可以描述这些无穷多句子类型的有穷机制。
也就是说,通过这些有穷的机制,我们可以不断地对已有的元素进行组合,并生成无穷多的句子或语法类型。
因此,可以用形式化的方法分析句子的语法及其生成过程。
但是,在很长一段时间里,Chomsky反对把组合原则和形式化方法应用到语义学的研究中。
这是因为语义问题不像语法结构那样有比较清楚的结构,尤其是,很难有与语法相对应的组合生成的语义解释。
然而,组合原则对于形式语义学是至关重要的,如果不能在自然语言的语义研究中很好地贯彻组合原则,那么也就没有形式语义学这一研究领域。
这成为形式语义学发展的一个瓶颈。
Chomsky对形式语义学基本持怀疑态度。
在很长的时间里,MIT一直没有研究形式语义学的人,直到1989年Chomsky才聘请了Irene Heim2去MIT工作。
这时的形式语义学已经发展得比较成熟。
形式语义学的想法是,对应于语法中的组合原则,语义解释也应该是可以通过应用组合原则逐步生成的,即:一个语言的说话者可以知道无穷多句子的意义,也能够理解或表达他从未听说过意思。
因此,对于语义学来说,也一定存在某种有穷的机制可以让人们理解任何一种自然语言的无穷多的句子。
因此,形式语义学的一个主要原则是语法与语义之间的关系是组合的。
任何一个自然语言的语法和语义各自是按组合原则生成的,同时这两个组合原则又是相互对应的。
这类似于一阶逻辑这种形式语言,其句法和语义都要遵循组合原则,且相互之间存在一种组合的对应关系。
也就是说,语法与语义之间并非都是随意联系在一起的,而是可以遵循某些规则逐步组合而成的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/3/1
21
表达式 (11)– 替换例子
x.xy b.xy [a.ab/y]
= x.xy [a.ab/y] b.xy[a.ab/y] S4
= x.xa.ab z.xy[z/b][a.ab/y] S6;S8
= x.xa.ab z.xy [a.ab/y]
变换:设 (x.E)和E0为表达式,则称下 面变换为β变换(称β变换规则的左部表达 式为β基)
(x.E)E0 E[E0/x]
2020/3/1
18
表达式 (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’没有可替换
= {y} ( FV(y (x. x y ) )-{x,y}) {z} ( FV (x x) - {x})
= {y, z}
2020/3/1
16
表达式 (9)
封闭型表达式:
如果一个表达式E不包含自由变量, 即 FV(E) = , 则称E为闭型表达式;
开型表达式:
如果一个表达式E包含自由变量, 即 FV(E) , 则称E为开型表达式;
合法的变换 X.(ZX) Y.(ZY)
X.((Y.YX)X) Z.((Y.YZ)Z)
非法的变换 X.(Z(Y.X)) Y.(Z(Y.Y )) X.(ZY) Y.(ZY)
2020/3/1
27
Lambda演算的变换系统 3 -- 变换
自由变量集合:用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’)
y (x y. y (x. x y ) ) (z (x. x x) )
自由 出现
约束 约束 出现 出现
自由 出现
约束 出现
2020/3/1
14
表达式 (7)– 自由变量
自由变量:称x为表达式E的自由变量,如果E中至少
包含一个x的自由出现;
需要区分的概念:
变量:<变量名,含义>,定义点确定 变量名:标识符 变量的出现:<变量名,位置>
= x1. x2. … xn. ( E1 E2 E3 … Em )
2020/3/1
11
表达式 (4)—子表达式
子表达式(针对不同的表达式形式)
设E是一个表达式,则E的子表达式可以定义为: E x ,x就是E的子表达式; E E1 E2 , E1和E2以及它们的子表达式都是E的
S8:如果yFV(E0) xFV(E’),则 (y. E’)[ E0/x] = z.((E’ z/y])[E0/x]), zFV(E0), z y
只有自由出现的变量才允许被替换,而且替换不应 该把变量的自由出现变为约束出现。
要避免出现 ( y. x+y) [y/x] = ( y. y+y),
McCarthy)设计的。
2020/3/1
6
2.2 Lambda演算
主要内容
2.2.1 Lambda演算介绍
表达式 自由变量 free variables(FV) 替换 substitution 变换规则 conversion rules 归约 reduction
2.2.2 Lambda演算作为计算模型 2.2.3 Lambda演算系统的扩充
2020/3/1
13
表达式 (6)—自由出现
在表达式中相同的变量名,可以出现在表达式的不
同的位置,它们的含义可能不同;
自由出现/约束出现:表达式E中变量名x的一次出现
称为自由出现,如果E中任何一个形如x. E’的子表
达式不包含该出现;如果存在一个x. E’的子表达式
包含该出现,称为约束出现;
实际上给出了一种计算规则; 不同的Lambda演算系统有不同的变换规则; 变换规则是保结构和保值的; 变换系统定义了Lambda演算的语义;
2020/3/1
25
Lambda演算的变换系统2 -- 变换
变换:设E是表达式,x是变量,则称下面变换为 α变换(其中y不在 FV( x.E )中)
运算的并行性:运算分量,函数实参表达式都可并 行计算;
引用透明性:
计算的延迟性:
支持模式和模式匹配;
函数式语言具有比命令式语言更高的数学抽象力,
2020/3/1因此在描述某些算法的时候更精炼和严格;
4
引言
函数式语言不仅可用于程序设计,还可 用于算法、编译器、解释器的抽象描述 ,以及指称语义的定义等方面。
形式语义学
Formal Semantics of Programming Languages
2011.09
第二章 函数式抽象描述方法
2.1 论域理论基础 2.2 Lambda演算 2.3 函数式抽象语言 2.4 函数式抽象语言的应用
2020/3/1
2
第二章 函数式抽象描述方法
2.2 Lambda演算( calculus)
2.2.1 Lambda演算介绍 2.2.2 Lambda演算作为计算模型 2.2.3 Lambda演算系统的扩充
2020/3/1
3
引言
欧美等大学大都将函数式语言作为第一 门程序设计语言
函数式语言与过程式语言的区别
强调值的概念:有什么类型就有什么值,高阶值;
2020/3/1
23
Lambda演算通常包括两个部分:
合法表达式(表达式)的形式系统 (语法)
语法结构; 自由变量; 替换
变换规则的形式系统 (语义)
2020/3/1
24
Lambda演算的变换系统 1
变换系统给出了如何从一个表达式转换成 和其等价的另外一个表达式;
施用型表达式(APPLY):
E1 E2 -- 函数调用,E1是函数定义, E1是实参
抽象型表达式(Abstraction) :
x .E --- 无名函数定义,x对应形参,E是函数体
举例:
x x;
x.xy ;
x (y.xy ) ;
x.y.x ;
2020/3/1
x. E表达式中x.部分可以看作是变量x的定义点, 在 E 中x的定义域中出现变量x为其使用点;
举例:
表达式:y (x y. y (x. x y ) ) (z (x. x x) )
x 的作用域是 y; y的作用域是 y (x. x y ) ;
x 的作用域是 x y ;x的作用域是 x x;
2020/3/1
15
表达式(8)-计算自由变量集合例子
表达式E = y (x y. y (x. x 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) )
S7:如果xFV(E’) ,则
(y.E’)[E0/x] = y.(E’ [E0/x]) = y.E’
2020/3/1
19
表达式 (10)– 替换
E y. E’, xy,
E0中有y的自由出现,E’中有可替换的x,则需要对y进行改 名,改变后的变量名z是不同于y的E0的非自由出现。
2020/3/1
7
2.2.1 Lambda演算介绍
Lambda演算可看作是一个简单的语义 清楚的形式语言;可以用来解释复杂的 程序设计语言或者计算模型;
Lambda演算通常包括两个部分:
合法表达式(表达式 )的形式系统 (语法) 变换规则的形式系统 (语义)
2020/3/1
8
表达式 (1)—定义
2020/3/1
17
表达式 (10)— 替换
替换:设E和E0是表达式,x是变量名, 替换E[E0/x]是表示把E中所有x的自由出现替换成E0。
Substitution,代换(替换),表示形式有多种:
[E0/x]E ; [E0/x,E]; [xE0,E]; E[E0 /x]
E[E0/x]的计算规则为:
S7
= x.xa.ab z.x a.ab
S6
2020/3/1
22
已经介绍
Lambda演算的语法 – 表达式形式定义 相关的一些概念
子表达式 作用域规则 自由变量 替换:是Lambda演算中最重要的一个概念;
后面定义的转换系统都是基于替换的;
正确的替换,自动改名:( y. x+y) [y/x] = z. y+z
2020/3/1
20
表达式 (11)– 替换例子
x [xy/x] = xy
y [M/x] =y
x.xy [E/x] = x.xy
x.xz [w/y] = x.xz
S1 S2 S3;S5 S7
S1: E x , x[E0 /x] = E0 ; S2: E y , y[E0 /x] = y ,x y ; S3: E (E’), (E’) [ E0 /x] = E’ [ E0 /x] S4: E E1 E2,E1E2[E0/x] = (E1[E0/x]) (E2[E0/x]); S5: E x. E’, x. E’[E0/x] = x.E’ ;