Skip to content

函数与符号

函数是什么

函数是什么?对于有初中数学基础的同学,一个函数 f(x)f(x) 表示将某个数字作为自变量 xx 的取值,按照某个表达式计算的结果; 对于有计算机基础的同学,一个函数可以执行某些计算,也可能会带有某些副作用,计算的结果也可以不是数字; 在 Excel 表格中,函数可以对一组单元格的数据进行计算和操作。

这些事实告诉我们,在不同的情景中,函数有不同的定义,即不同的理解方式。

不妨忘记这些背景知识(如果有的话 ^_^),在 λ-Calculus 中你可以不理解函数的意义,也不应当赋予函数意义,至少目前是这样。

对于一部分读者来说,忽略一个概念的意义去理解相关的描述是一个可以接受的事情,但对于另外的读者,他们的脑子里也许会始终被这个问题盘踞,以至于很难用心去阅读接下来的内容。

对于后者,不妨想想自然数集的意义是什么。当然你不能用 {0,1,2,,}\{0, 1, 2, \ldots, \} 或者 zero,one,two…… 或者花体字符 N\mathbb{N}(数学中自然数集的符号)来回答这个问题,因为这些只是自然数集的同义词,而不是它的意义。

这里我们说的“意义”不是“作用”、“影响”、“地位”等外延,而是“本质”、“含义”的意思。

自然数集的意义可能本身没什么讨论价值,毕竟我们不理解它的意义也完全可以利用这一概念了,它在现实生活中有许多具象的表现(数量的表示),足以让我们理解它的抽象存在。

λ-Calculus 中的函数并非没有具象的表现,但它本身没有特定的意义。因此请这部分读者先放一放这个问题,把它当成类似自然数的东西来看待。在数学中,自然数具有基石一样的地位,而在 λ-Calculus 中,函数将会是最本原的概念。

符号是什么

让我们从一个非常简单的函数开始:f(x)=xf(x) = x

这时另外一个问题又出现了:xx 是什么?

在 λ-Calculus 中,xx 不是数学中未知数,不是程序中的参数,也不限于英文小写字母。我们可以将其笼统地称为变量,但是它本身只是一个符号。它可以是 abc,也可以是 αβγ。对此我们只需要了解一点:不同的符号是不同的。也就是说 a 和 a 是相同的符号,而 a 和 α 是不同的符号。

“这听起来太怪了!”

听君一席话,如听君一席话。符号在 λ-Calculus 中的作用只有一个:区分表达式的不同部分和不同变量。在数学上,x=1x = 1y=2y = 2,那么我们说 xxyy 不相等,其表达的意思是 xxyy 的数值不同。而当 x=y=1x = y = 1 时,我们可以说 xxyy 的数值相同,但两者的符号不同。

也就是说 “数值的相同” 是建立在 “=” 符号基础上的,而 “符号的相同” 这一概念没有其他的依赖。只要存在多种不同的符号,就有 “相同” 和 “不同” 的概念。如果人的眼睛里始终只有一种颜色,那么等价于他什么也看不到,而我们所看到的都是 “不同” 的部分,前后的颜色变化,不同区域亮度的变化等等。这种 “相同” 也被称作 identical [1]

对于真的暂时忘记了背景知识的细心的读者,你们还会发现,这里隐藏了更多的问题:f 是什么?() 的作用是什么?= 的含义是什么?

考虑到在 λ-Calculus 中我们通常不以上面的形式表示函数,这些问题我们暂且略过,而是将函数的表示做出修改,这将会是我们遇到的第一个 λ 表达式

λx.x

这里我们略去了 f,毕竟我们不需要给这么简单的函数一个别名。

λ 表达式

一个 λ 表达式包含三种符号:λ. 和变量符号。 λ. 总是成对出现(就像左右括号一样),中间有且仅有一个变量符号 [2]。而在 . 的后面有一个 λ 表达式。两个由空格隔开的 λ 的表达式整体可以被当作一个表达式,而使用左右括号包裹 λ 表达式可以明确表达式范围。

为了简洁,下面用 λ 代替 “λ 表达式”,而 λ 表示这个希腊字母本身

严谨的定义

为了明确 λ 的定义,我们不得不使用一些数学语言来描述它 :)

不妨设 Λ\Lambda 为所有合法的 λ 表达式构成的集合,设 Σ\Sigma 表示所有可能用到的符号构成的集合(一般是各种字符都可以,除了 λ 本身)。那么我们规定:

  1. 符号:ΣΛ\Sigma \subset \Lambda,也就是说单个符号本身是合法 λ。
  2. 抽象:fΛ,xΣ\forall f \in \Lambda, x \in \Sigma,有 λx.fΛ\lambda x.f \in \Lambda,即形如 λx.f 的是合法的 λ。
  3. 应用:f,gΛ\forall f, g\in \Lambda,有 f  gΛf\; g \in \Lambda(注意 ffgg 之间的空格),即形如 f g 的是合法的 λ。

另外为了便于阅读,eΛ\forall e \in \Lambda,有 (e)Λ(e) \in \Lambda。也就是说 λ 外面套一层括号也是合法的 λ 表达式。此外对于多个表达式均由空格隔开的情况,我们总是从左到右依次使用规则 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 的表述尚停留在概念本身,也就是它的前半部分——λ,缺少了属于演算的那一部分。对于后者,我们将会在下一章介绍。


  1. https://math.stackexchange.com/q/1058610 #

  2. 这里仅考虑最基础的 λ 表达式语法 #

  3. 《道德经》第一章 #