函数与符号
函数是什么
函数是什么?对于有初中数学基础的同学,一个函数 表示将某个数字作为自变量 的取值,按照某个表达式计算的结果; 对于有计算机基础的同学,一个函数可以执行某些计算,也可能会带有某些副作用,计算的结果也可以不是数字; 在 Excel 表格中,函数可以对一组单元格的数据进行计算和操作。
这些事实告诉我们,在不同的情景中,函数有不同的定义,即不同的理解方式。
不妨忘记这些背景知识(如果有的话 ^_^),在 λ-Calculus 中你可以不理解函数的意义,也不应当赋予函数意义,至少目前是这样。
对于一部分读者来说,忽略一个概念的意义去理解相关的描述是一个可以接受的事情,但对于另外的读者,他们的脑子里也许会始终被这个问题盘踞,以至于很难用心去阅读接下来的内容。
对于后者,不妨想想自然数集的意义是什么。当然你不能用 或者 zero,one,two…… 或者花体字符 (数学中自然数集的符号)来回答这个问题,因为这些只是自然数集的同义词,而不是它的意义。
这里我们说的“意义”不是“作用”、“影响”、“地位”等外延,而是“本质”、“含义”的意思。
自然数集的意义可能本身没什么讨论价值,毕竟我们不理解它的意义也完全可以利用这一概念了,它在现实生活中有许多具象的表现(数量的表示),足以让我们理解它的抽象存在。
λ-Calculus 中的函数并非没有具象的表现,但它本身没有特定的意义。因此请这部分读者先放一放这个问题,把它当成类似自然数的东西来看待。在数学中,自然数具有基石一样的地位,而在 λ-Calculus 中,函数将会是最本原的概念。
符号是什么
让我们从一个非常简单的函数开始:。
这时另外一个问题又出现了: 是什么?
在 λ-Calculus 中, 不是数学中未知数,不是程序中的参数,也不限于英文小写字母。我们可以将其笼统地称为变量,但是它本身只是一个符号。它可以是 abc,也可以是 αβγ。对此我们只需要了解一点:不同的符号是不同的。也就是说 a 和 a 是相同的符号,而 a 和 α 是不同的符号。
“这听起来太怪了!”
听君一席话,如听君一席话。符号在 λ-Calculus 中的作用只有一个:区分表达式的不同部分和不同变量。在数学上,,,那么我们说 和 不相等,其表达的意思是 和 的数值不同。而当 时,我们可以说 和 的数值相同,但两者的符号不同。
也就是说 “数值的相同” 是建立在 “=” 符号基础上的,而 “符号的相同” 这一概念没有其他的依赖。只要存在多种不同的符号,就有 “相同” 和 “不同” 的概念。如果人的眼睛里始终只有一种颜色,那么等价于他什么也看不到,而我们所看到的都是 “不同” 的部分,前后的颜色变化,不同区域亮度的变化等等。这种 “相同” 也被称作 identical [1]。
对于真的暂时忘记了背景知识的细心的读者,你们还会发现,这里隐藏了更多的问题:f 是什么?(
和 )
的作用是什么?=
的含义是什么?
考虑到在 λ-Calculus 中我们通常不以上面的形式表示函数,这些问题我们暂且略过,而是将函数的表示做出修改,这将会是我们遇到的第一个 λ 表达式:
这里我们略去了 f,毕竟我们不需要给这么简单的函数一个别名。
λ 表达式
一个 λ 表达式包含三种符号:λ
,.
和变量符号。 λ
和 .
总是成对出现(就像左右括号一样),中间有且仅有一个变量符号 [2]。而在 .
的后面有一个 λ 表达式。两个由空格隔开的 λ 的表达式整体可以被当作一个表达式,而使用左右括号包裹 λ 表达式可以明确表达式范围。
为了简洁,下面用 λ 代替 “λ 表达式”,而 λ
表示这个希腊字母本身。
严谨的定义
为了明确 λ 的定义,我们不得不使用一些数学语言来描述它 :)
不妨设 为所有合法的 λ 表达式构成的集合,设 表示所有可能用到的符号构成的集合(一般是各种字符都可以,除了 λ
本身)。那么我们规定:
- 符号:,也就是说单个符号本身是合法 λ。
- 抽象:,有 ,即形如 λx.f 的是合法的 λ。
- 应用:,有 (注意 , 之间的空格),即形如 f g 的是合法的 λ。
另外为了便于阅读,,有 。也就是说 λ 外面套一层括号也是合法的 λ 表达式。此外对于多个表达式均由空格隔开的情况,我们总是从左到右依次使用规则 3 来建立表达式(左结合)。
例如 a b (c d) e 等价于 ((a b) (c d)) e, λx.λy.x λx.y 等价于 λx.(λy.(x (λx. y)))。
道生万物
根据这样的规则,我们可以写出许多不同的 λ:λx.λy.x y x,也可以是 a b c (d e) f,亦或者 λx.λx.λx.x (x x x) x……
从形式上来说,λ-Calculus 已经是 “道生万物” 了,但何为其 “道”?
“道可道,非常道”[3],不讨论关于它的各种玄妙解释,就 “解释这一至理名言” 的所有尝试来看,古今文人墨客在尝试理解它,又如何不是在感受它的美,而这需要将之与客观事实对应,转化为人类的世界观中的 “语言”——五感、思想、符号等皆可是语言。而所谓 “对应”,我们可以将它不严谨地归约到一个看起来严谨的词:同构。
以 λ-Calculus 为道,我们本能地尝试用客观存在的事物来寻找同构的关系,以理解其非常之道。
我以我对《道德经》拙劣的理解,提出以下想法,它描述了 λ 的数学定义与 “道” 之同构,希望能帮助读者初步感受 λ 的简约美:
- 符号变成 λ 是从无到有的创世,是为 “道生一”;
- 抽象一个 λ 会得到下一个 λ,是为 “一生二”;
- 应用第一个 λ 于第二个 λ 会产生新的 λ,是为 “二生三”;
这三条规则描述了所有的 λ,是为 “三生万物”。
尾声
λ-Calculus 究竟以怎样的方式在现实中具现?
我想现在仍然没法回答这个问题。这是因为我们目前对 λ-Calculus 的表述尚停留在概念本身,也就是它的前半部分——λ,缺少了属于演算的那一部分。对于后者,我们将会在下一章介绍。
这里仅考虑最基础的 λ 表达式语法 #