同构:编程中的数学
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.6 形式与结构

你也许注意到了在本章第一节中,每个自然段的开头的第一个汉字连起来是“自然数产生”,我希望用这种形式表达同构的美。亚里士多德说美的主要形式就是秩序、匀称和确定性,这些正是数学研究的原则。我们展示了自然数可以和欧几里得几何一样建立在公理之上。我们用自然数和列表的同构同样想表达这种形式上的美。文艺复兴时期的艺术大师拉斐尔在创作不朽的作品《雅典学院》时,也采用了同构,如图1.10所示,画中的历史人物和当时的人物对应。画面中心向我们走来的是两位伟大学者柏拉图和亚里士多德。其中柏拉图的原型是文艺复兴时期的艺术大师达·芬奇,亚里士多德的原型是朱利亚诺·达·桑加洛。画中的柏拉图右手向上指,意思是说人类应该思考永恒。而亚里士多德手向前伸,手掌向下,意思是说人类应该研究世界。这两个对立的手势,表达了他们思想上的分歧。中间台阶下方,倚箱沉思的是古希腊杰出的哲学家赫拉克利特,他是西方最早提出朴素辩证法和唯物论的卓越代表。他的原型是文艺复兴时期的另一位大师米开朗基罗。画面左前方以毕达哥拉斯为中心,他正在专注地书写。毕达哥拉斯右侧有一位身穿白色斗篷的金发青年,被认为是弗朗西斯柯·德拉·罗斐尔,他是乌尔宾诺未来的大公。画面右下方中心是手拿圆规的欧几里得,他的周围有手持天球的天文学家托勒密,对面是画家拉斐尔的同乡、建筑家布拉曼特,而最边上那个头戴白帽的人,是画家索多玛,上面露出半个脑袋、头戴深色圆形软帽的青年,就是画家拉斐尔本人。这让人联想起了伟大的音乐家巴赫把自己的名字B-A-C-H通过调式写进了《赋格的艺术》的音乐当中。《雅典学院》通过回忆历史上的黄金时代,表达人类对智慧和真理的追求,同时通过文艺复兴时期的人物作为原型,呼应了复兴古希腊艺术和哲学思想的时代主题。这是形式与内容、结构与思想的同构。

练习1.4

1.观察斐波那契的叠加定义,它的后继计算(m′,n′)=(n,m+n)相当于一个矩阵乘法:

图1.10 拉斐尔《雅典学院》局部

起始值是(0,1)T。这样斐波那契数列就在矩阵乘方下和自然数同构:

设计一个程序,快速计算2阶方阵的幂。求得斐波那契数列的第n个元素。


[1] 一说为整数。

[2] 也有人规定自然数从1开始,而不是0开始。在皮亚诺当年的著作中,五条公理的顺序与此不同,其中第五条归纳公理被写在第三的位置上。

[3] 国际语的英文为Interlingua,它和世界语(Esperanto)是两种不同的人造语言。

[4] 本书使用一种理想的计算机语言,并在每一章节的最后给出真实计算机语言的参考代码。

[5] 同构(isomorphism)的严格定义将在第3章给出,这里泛指结构上的一种对应。

[6] 在计算机程序中,也称为二元组(tuple)或者对(pair)。

[7] 如果起始值是1和3,我们就得到了卢卡斯数列1,3,4,7,11,18,…

[8] 在介绍康托尔的无穷概念时,我们会给出另一个斐波那契数列的定义。

[9] 2010年后,Haskell中不再允许使用n+k形式的模式匹配。

[10] 一行代码输出前100个斐波那契数的例子:take 100 $ map fst $ iterate(λ(m,n)->(n,m+n))(0,1)data List A=nil|cons(A,List A

[11] 名称cons来自Lisp的命名传统。

[12] 很多情况下,列表中保存的数据类型是相同的。但也有异构类型的列表,例如Lisp中的列表。

[13] 这也是我们避免使用加号“+”来表示列表连接的原因。但是很多编程语言使用了加号,这造成了一些潜在的问题。

[14] 和一一映射不同,这里的映射是单向的,例如从一个词语到它的字符长度的映射,其逆映射并不存在。

[15] 也称麦卡锡条件形式,是计算机科学家Lisp发明人约翰·麦卡锡于1960年引入的。