Lambda 学习笔记

历史

莱布尼茨曾有过以下两个想法:

  1. 创造一门‘形式语言’,来描述所有可能的问题
  2. 找到一种方法,可以解决所有该形式语言描述的问题

第二个问题被称为Entscheidungsproblem(可判定性)。
1936年,Turing 和 Church 分别推出了两种不同的模型来解决可计算问题。
Church 提出了一个形式系统叫做 lambda 演算,并通过这一系统定义了可计算函数的符号表示。
Turing 提出了图灵机模型。

依据图灵机模型,冯诺依曼型计算机被创造。指令式语言,如 Fortran,Pascal 等都是以图灵机为基础,他们都依赖于状态序列。
而函数式语言,如 ML,Lisp,Haskell等则是以 lambda 演算为基础。

Lambda

Lambda 演算由3个部分(lambda terms)组成:expressions, variables, abstractions.
lambda terms 定义如下:

<expression> := <name>|<function>|<application>
<function>   := λ <name>.<expression>  (also called abstraction)
<application>:= <expression><expression>
  • name(variables) 为一个无限长的标识符集合,如 V = {v,v',v'',v'''...}
  • 表达式是可以是一个标识符或者一个函数抽象或者是两者的组合
  • 函数抽象由两部分组成:头部和函数体。头部为 λ 加上一个标识符,body 为一个表达式。使用 . 进行分隔。一个简单的例子:λx.x

函数应用

我们把 FA 称为函数应用,把表达式 F 看做是一个算法,而表达式 A 看做一个输入。
表达式可以自己应用自己, FF,这样可以实现递归。
函数应用默认为左结合,即 E1E2E3 . . . En == ((E1E2)E3). . . En)

Free and bound variables

在函数抽象中,如果函数体中存在的标识符存在于头部, 称为绑定标识符(bound variables)。在函数应用中,输入会被代换到绑定的标识符上。
不存在于头部的,称为自由标识符(free variables)。
比如下面这个表达式中,x 为 bound variable,y 为 free variable
λx.xy
注意 λx.xyλx.xz 并不等价,因为 y 和 z 可能不相等。而 λxy.xyλab.ab 是等价的,我们可以通过下面的 alpha 替换得到。

Alpha 替换

我们可以在命名不冲突的情况下,把表达式中绑定的标识符替换为其他标识符。

(λz.z) ≡ (λy.y) ≡ (λt.t) ≡ (λu.u)

Beta 化简

在函数应用中,我们用输入的表达式代入到函数体中绑定的标识符上,这一过程称为 Beta 化简。

 (λx.xy)z   
 [x:=z]   把 z 代入到函数体中的 x
 zy

一个复杂的例子:

 ((λx.x)(λy.y))z 
[x:=(λy.y)]
(λy.y)z
[y:=z]
z

柯理化

当我们的表达式有多个参数的时候,可以以柯理化的方式表示:
λxy.xyλx.(λy.xy) 是等价的。

(λxy.xy)wz ≡ (λx.(λy.xy))wz ≡ wz

(λx.(λy.xy))wz
[x:=w]
(λy.wy)z
[y:=z]
wz

Normal form

我们可以通过 Beta 化简不断使用一个表达式去替换另一个表达式,重复这一过程,直到无法再替换后所得到的表达式称为 normal form。
一个例子, 2000/100 并不是 normal form,而完全计算后的 2 是 normal form。
另一个例子, λx.x 为 normal form, 而 (λx.x)z 不是 normal form,它可以被化简为 z,这才是 normal form。
并不是所有的表达式都能化简到 normal form 的。比如下面这个例子:

(λx.xx)(λx.xx)
[x:=(λx.xx)]
(λx.xx)(λx.xx)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容