λ演算是一套用于研究函数定义、函数应用和递归的形式系统。它由 Alonzo Church 和 Stephen Cole Kleene 在 20 世纪三十
年代引入,Church 运用 lambda 演算在 1936 年给出 判定性问题 (Entscheidungsproblem) 的一个否定的答案。这种演算可以
用来清晰地定义什么是一个可计算函数。关于两个 lambda 演算表达式是否等价的命题无法通过一个通用的算法来解决,这是
不可判定性能够证明的头一个问题,甚至还在停机问题之先。Lambda 演算对函数式编程有巨大的影响,特别是Lisp 语言。
Lambda 演算可以被称为最小的通用程序设计语言。它包括一条变换规则 (变量替换) 和一条函数定义方式,Lambda 演算之通
用在于,任何一个可计算函数都能用这种形式来表达和求值。因而,它是等价于图灵机的。
尽管如此,Lambda 演算强调的是变换规则的运用,而非实现它们的具体机器。可以认为这是一种更接近软件而非硬件的方
式。
有界vs自由
python 代码
lambda表达式中的x,y与外部x,y显然是不同的,为了区别两者,引入了有界和自由的概念。lambda只能处理有界的标识
符。
当一个标识符出现在了lambda的参数里面,并包含在了这个lambda表达式中,那么就称其有界限,反之无界。
python 代码
x,y被包含在了lambda表达式中,所以其有界,而z没有那么他就是自由标识符,虽然y在lambda的参数中,但并没有在表达式中
出现。那么他就是自由的
有界和自由是一个相对的概念
python 代码
- (lambda x:(lambda y,z:y+2))
相对于内嵌的lambda,z是自由的,因为在内嵌的表达式中并没有z出现,然后相对于整个lambda表达式,它又是有界的。
“free(x)”代表表达式x所有的自由变量集合
判定lambda表达式完全合法的标准是它的所有变量都是有界的。
上例中
(lambda x,y:x+2)虽然可以在程序中正常执行,但其实是一个不完全合法的lambda表达式
lambda算子计算规则
alpha,beta,eta
alpha(conversion)(转换规则):
简单来说就是重命名规则(但被绑定的变量能否由另一个变量替换有一系列的限制):
lambda x,y:x+y与
lambda m,n:m+n是等价的
beta(reduction)(归约)
将lambda表达式中的有界变量替换为应用中对应得实际值
(lambda x,y:x+y)(2,3)等价于
2+3
Beta的严格定义:
lambda x . B e = B[x := e] if free(e) \subset free(B[x := e]
考虑这样一种情况
python 代码
- (lambda x:(lambda y:x+y)(x+3)
其等价的表达式现在是
x+x+3
这里的问题是lambda中得有界变量与(x+3)中得自由变量有冲突,两则是不同的,需要区别
alpha[x/z]:(lambda x:(lambda y:x+y)(x+3)=(lambda z:(lambda y:z+y)(x+3)
现在展开后就是
z+x+3,正确结果
eta(变换)
Eta表达的是外延性的概念,在这里外延性指的是,两个函数对于所有的参数得到的结果都一致,当且仅当它们是同一个函数。
(python中的lambda不等价与该处所指的lambda)
www.wikilib.com/wiki
分享到:
相关推荐
**Lambda 函数演算**(Lambda Calculus)是计算机科学、逻辑学和数学中的一个基本概念,由逻辑学家阿隆佐·邱奇在20世纪30年代提出。它的核心是一个简洁的表示函数及其应用的符号系统。Lambda演算通过抽象和应用两个...
Lambda Calculus for computer science; Although it is an introduction, it is an abstract for lambda calculus
Lambda Calculus its Syntax and Semantics.djvu 俄文版
这是一本讲述了Lambda Calculus的书,而且其内容讲的十分透彻,只是很厚,希望大家努力
《Lambda演算:简明介绍及其历史背景》 在探讨Lambda演算之前,我们先简要回顾一下数学符号的历史演变,这将有助于我们更好地理解Lambda演算作为一种创新性符号体系的出现背景。数学符号,尤其是数字表示法,在西方...
λ演算,λ(Lambda(大写Λ,小写λ)读音:lan b(m) da(兰亩达)['læ;mdə])演算是一套用于研究函数定义、函数应用和递归的形式系统。它由 Alonzo Church 和 Stephen Cole Kleene 在 20 世纪三十年代引入,...
Lambda学习,不错的资料参考 The λ-calculus was begun at Princeton, and the purpose of this report is to show how it has been recycled every decade after the 1930s in new and useful ways.
### Lambda演算简介 #### 一、Lambda演算概述 Lambda演算是一种形式化的计算模型,由美国逻辑学家阿隆佐·丘奇(Alonzo Church)在20世纪30年代提出。它最初是为了研究有效可计算函数的数学性质而开发的。经过数十年...
本书《Lambda Calculus with Types》不仅覆盖了Lambda演算的基础理论,还着重介绍了三种类型系统:简单类型、递归类型和交叉类型。简单类型系统确保函数接收特定类型的参数并返回特定类型的值;递归类型用于描述可以...
lambda的书
### Lambda演算与类型系统概览 ...综上所述,《Lambda Calculus and Types》涵盖了Lambda演算的基础知识、核心概念以及一些高级主题,为读者提供了深入理解Lambda演算及其在理论计算机科学中的应用的全面视角。
标题《通过λ演算介绍函数式编程》指出,本书旨在通过介绍λ演算这一简洁的计算形式系统,提供对函数式编程概念的温和引导。λ演算由Alonzo Church发明,是理论计算机科学领域的一个核心概念。书中以纯λ演算为基础...
Functional programming is rooted in lambda calculus, which constitutes the world's smallest programming language. This well-respected text offers an accessible introduction to functional programming ...
《Lambda 函数演算简介》由 Henk Barendregt 和 Erik Barendsen 合著,这本著作是深入理解 Lambda 函数演算的基础读物。Lambda 函数演算是数学和计算机科学领域的一个核心概念,它起源于莱布尼茨的理想——创建一种...
It is surprising that despite the simplicity of its syntax, the λ-calculus hosts a large body of notation, abbreviations, naming conventions, etc. Our aim, as far as the notation throughout this work...
Orangeboard Lambda Calculus Interpreter 是一个基于.NET / mono平台的开源项目,专为了解释和评估未类型化的λ(Lambda)演算表达式而设计。λ演算是计算机科学中一种抽象的计算模型,由数学家Alonzo Church在20...
图灵lambda演算是一种视觉语言,用于表示未类型化的lambda演算,并且可以应用于新兴代数的计算或局部平面纠结图的Reidemeister变换的表示。由Marius Buliga在罗马尼亚科学院数学研究所提出的这一理论,具有一个核心...
LCI(Lambda Calculus Interpreter)是一个实现这个理论的开源项目,它为用户提供了一个交互式的环境来实验和理解 lambda 演算。 LCI 不仅仅是一个简单的语法解析器,它还包含了对 lambda 演算的丰富支持。以下是...
在1997年的论文"The Impact of the Lambda Calculus in Logic and Computer Science"中,探讨了Lambda演算如何影响逻辑学和计算机科学的发展。Lambda演算由数学家阿隆佐·邱奇于20世纪30年代提出,它为函数式编程...