LISP 语言是怎么来的–LISP 和 AI 的青梅竹马 B

上回我们说到 LISP 和 AI 很是青梅竹马的时候,浮光掠影地说因为 LISP 的基本数据单元–”链表”在知识表示上的比较优势。 我们说, AI 要处理的数据结构和要刻画的现实世界的模型很复杂,使得数组等其他简单数据结构不能胜任,所以“链表”成了最佳的选择。 如果我们顺着这样的逻辑线往下看,似乎选择 LISP 这个“列表处理的语言”似乎是理所当然的。 可是,这个原因并不充分。 因为 LISP 语言可不仅仅是列表处理,还包括函数式编程等等其他。 反过来说,如果仅仅是列表处理对于 AI 至关重要的话,那么在 FORTRAN 和 Algol 这些通用编程语言又非常普及的传统语言里面写一些关于列表处理的函数岂不是更加直观和方便? 归根结底,到底 LISP 还有什么其他奥妙呢?

当我们追寻函数式编程这条线索的时候,就会不可避免的触及到 AI 的早期历史。LISP 的特性,其实都是和当时 AI 的范式 (paradigm) 息息相关的。

AI 范式的演变

早在 McCarthy 这一代人提出 AI 之前,冯诺伊曼等人就开始研究什么是智能以及如何实现智能的问题了。 所不同的是,他们更加偏重于研究大脑的内部工作机理,并且试图通过在模拟大脑的工作机理,来实现智能。 这一学派的哲学很清晰: 人类大脑是一个标准的智能体,我们只需要让计算机模拟人的大脑的工作方式,计算机就有了和人类大脑一样的智能了。 对于这一派的研究者来说,他们相信大脑的结构和工作机理决定了智能,至于大脑是用脑细胞构成的,还是用电子电路模拟的,对于智能来说毫不重要。 这方面的著名工作就是冯诺伊曼的《计算机和大脑》这篇论文。 在这篇不算很学术的随笔里面,他分析了人的大脑有多少个神经元,计算机有多少个晶体管,通过这些定量的比较来解释计算机和人的大脑的差距。 当时和冯诺伊曼齐名的另一个神童是开创控制论的维纳。 他和冯诺伊曼一样,兼通很多学科。 和冯诺伊曼一样,他职业是数学家,但是也精通如神经科学和脑科学等学科。一个显然的例子就是在《控制论》这本书里面, 维纳对大脑和神经的分析比比皆是。这种对大脑和神经分析的传统,从 Cajal (对,就是写 Advice for a Young Investigator 的那个大神) 开始,一直延续到了后来 AI 中的联接主义(主要研究神经网络的一个人工智能学派)。

可是,从脑科学和认知科学的角度去分析智能在当时有一个非常大的局限: 脑神经解剖学本身不成熟。 比方说,现如今脑科学家在分析脑功能的时候一般会借助于 fMRI 和其他一些神经造影技术。这些技术可以做到实时观测到脑中血氧分布,直接确定大脑在执行特定任务时候的活跃部分。当年的科学家则只能使用有限的几种医学成像技术,或者从血管摄影的角度研究大脑。 受限于当时的研究条件,当年的研究者很难直接观测到脑神经的实时工作状态,分析大脑的实时工作机理。 因此,对脑的研究就很难做到非常深刻。 医学研究条件的限制,加上当时电子学的发展和集成度远远不够,用电子电路模拟大脑生成智能就显得非常遥远。 因此,虽然这一派的思想超前,但是大部分的工作都不在于真正的用电子电路模拟大脑,而是在探索脑科学和神经科学本身,或者仅仅用电子电路模拟一些简单的神经动力学行为和小规模神经网络。正是因为连接主义在实现人工智能本身方面进展并不大,所以在AI领域中一直不是潮流的研究方向。上个世纪 80 年代前成功实施的一些人工智能系统,极少是来自于连接主义学派的。直到80年代后随着 BP 算法的重新发现,联接主义才迎来了第二春。 这时候,LISP 已经过完 20 岁生日了。所以,联接主义 对 AI 领域使用的编程语言的选择的影响并不算大。

符号主义

虽然联接主义这一学派在当时不怎么流行,当年的 AI 研究可是进行的如火如荼。这如火如荼的学派,采用的是另外一套方法,我们称之为“符号主义学派”。 符号主义学派的渊源,可以直接追溯到图灵。图灵在人工智能方面做过很多的研究,其中最为大家所知的就是“图灵测试“了。 有句俗话叫做“在网上,没人知道你是一条狗”, 在这句话里,只要把“狗”换成“计算机”,就是简单版的图灵测试了。 用个比较“潮”的比方,图灵测试就是让一台计算机或者一个真实的人(又叫评委)在网上交流,然后让这个评委猜测和他交谈的究竟是人还是计算机。 如果这位评委也不能分辨谈话的对方到底是人还是计算机的话,我们就认为这个计算机已经足以“以假乱真”,拥有“和人类一样的智能”了,也就是通过“图灵测试了”。

在很长一段时间里,图灵测试一直是人工智能研究的圣杯(holy grail)。 也就是说,通过”图灵测试“ 成了人工智能研究的终极目标。 那么,自然的,最最直接的通过图灵测试的方法不是让计算机和人脑一样思考,而是只要能够让计算机处理对话中用到的的单词,句子和符号,并且在对话中能够和人一样的操纵这些单词和符号,计算机就有很大的希望通过图灵测试。 从最极端的情况来看,计算机甚至都不需要去“理解”这些句子的含义,都有可能通过图灵测试。 [具体细节可以阅读 Wikipedia 上的“Chinese Room (中文房间)”条目]。 有一个开源的聊天机器人,叫做 A.L.I.C.E., 就把上面我们说的“只要能够处理和操纵符号,就有可能通过图灵测试”发挥到了近乎极致。 这个聊天机器人在图灵测试比赛中已经多次骗过人类评委,到了非常“智能”几乎能以假乱真的地步。可是,就是这样一个离通过图灵测试很近的机器人,其基本结构却简单到了我们都不能想像的地步:A.L.I.C.E.  的数据库里面有一条一条的规则,这些规则规定了她看到你说什么的时候她说什么。唯一有点“智能”的地方,就是有些规则不光取决于你这句话,还取决于你的上一句话。 [比如日常对话中我们先问“你喜欢看电影么?”,接着再问“什么类型的?”,这时候就需要前一句话推出这个问题是“(喜欢)什么类型的(电影)”]。“中文房间”的例子,和 A.L.I.C.E. 机器人如此简单的结构,都出人意料的显示出,即使计算机拥有了对符号的操作能力,通过了图灵测试,它也未必是是“有智能”的。 可惜这句话只是我的马后炮而已,在 AI 发展的早期,因为图灵测试的拉动,联接主义的相对弱势和符号主义的繁盛,都把全世界的 AI 研究往一个方向拽,这个方向,很自然的,就是“符号处理”。

符号处理和 LISP 补充

其实上一篇我们已经提到了,Alan Newell 和 Herbert Simon 认为对符号演算系统就可以衍生出智能,所以上面的文字,算是对符号主义这个 paradigm 做一个历史的小注解。 当我们把 LISP 放到这段历史中,就会自然的想到, 什么语言适合人工智能的问题,就变成了“什么语言能做符号处理”。这个问题的答案,读者也都猜到了,就是 LISP。

符号处理在 LISP 里面的长处前文我已经介绍过一些了,这里我们可以再补充几点零碎的。LISP 里有一个大家都知道的统一表示程序和数据的方法,叫做 S-Expression。 这个 S,其实就是 Symbolic 的意思。 把程序和数据都统一的当成符号,用现代编程语言的话说,就是 LISP 支持 meta-programming。LISP 程序可以处理,生成和修改 LISP 程序。这个特性,加上函数是一阶对象的特性,使得 LISP 远远比同时代的任何语言灵活。我本人不是 LISP 的用户(初级用户都算不上),因此在这一点上所知有限。但单就我有限的对 LISP 的理解,我认为 LISP 的这种灵活,恰好满足了基于符号处理的 AI 领域对语言的“强大的表达能力”(可以对任何复杂系统建模)和“高层的抽象能力” 的需求。关于第一点,有一个著名的段子,说任何一门编程语言技巧和思想被提出的时候,总会有一个高人出来,说,这个玩意儿在 LISP 里面早就有了,具体的例子包括刚才说的 metaprogramming, object oriented language。这里面蕴含的,就是 LISP 的强大的表达能力,使得很多编程的范式,在 LISP 里面都能实现,或者找到影子。 关于第二点,SICP 中例子比比皆是,讲得都比我深刻许多,就无需废话了。

在上篇文章中我提到,翻开任何一本编程的书,都会讲到“LISP是适合 AI 的编程语言”。那么,如果您和我当年一样,有兴趣从事 AI 方面的研究和探索,就不免要疑惑:“为了学习 AI, 我要不要学习 LISP” 呢?现在距离我当年的这个疑惑已经差不多8年了,我并没有一个确定的答案,但是我知道了更多的一些事实。

如今的 AI 范式

如果你让任何一个 AI 方向的研究者推荐几本适合初学者的书的话,十有八九他会提到 “Artificial Intelligence: A Modern Approach”(人工智能,一种现代方法) 和 “Artificial Intelligence: A New Synthesis” (人工智能,一个新的综述)。 这两本书的作者分别是 Peter Norvig 和 Nils Nilsson,都是 AI 领域的元老级人物。 如果你是一个对书名很敏感的人,你肯定会想:奇怪了,这种书又不是畅销书,难道这两位大牛写了书怕卖不出去,非要在书名上加一个 “现代” 或者 “新” 来吸引眼球? 事实上,这个“现代”和这个“新”都大有来头。 实际上,这二十年来,AI 研究领域接连发生了好几个非常大的 paradigm shift. 传统的基于符号的 AI 方法不再是主流,取而代之的,是多种多样的基于统计的,基于自动推理的,基于机器学习的,基于群体智慧的,基于大规模数据集的等等各种各样研究方法的兴起。 这个 paradigm shift, 对于领域之外的人好像是静悄悄的,可实际上 AI 领域早已发生了翻天覆地的变化。所以才会有 “新” 和 “现代” 这样的词出现在书标题上。 不幸的是,大多写编程语言书的作者,未必全部知晓这个变化,因此还沿袭原来的框架,继续写下 “LISP是适合 AI 的编程语言” 这样一个早就不能完全反映现状的断言。 如果我们统计一个从事 AI 研究的研究者或者科学家用什么语言,答案可能是五花八门无所不有: 做 AI Search 的用 C/C++/Java, 做机器学习的如果模型和矩阵关系密切,可以用 Matlab, 如果统计计算较多,也可以用 R。 至于做数据挖掘等等,语言和库更加五花八门,根本无法宣称那一个语言占上风。LISP 是适合 AI 的语言的教科书神话,也早就被无数的这样的实例给打破了。

延伸阅读:

http://stackoverflow.com/questions/130475/why-is-lisp-used-for-ai

48 comments

从无知到有知

[这篇文章是以前写的,主要是提醒自己的]

人的一生是要不断学习的。这里面的动力很简单:因为我们在有些方面还“无知”, 无知是做事情的一个障碍。我们如果想做好事情,就要求知,要改变这种无知的状况。

可是大多数人不知道的是,“无知” (ignorance) 其实不是一个状态,而是两个截然不同的状态,一种叫做不知道型无知 (uninformed ignorance),另一种叫做知道型无知 (informed ignorance)。 相信很多人都有这个体会:某天看到一本书,一篇文章,觉得这里面的学问知识,是自己从来没有想过或者接触过的,是一个崭新的领域,这就代表了你突然发现了自己的无知,而且知道自己的这种无知,也就是,从 uninformed ignorance 跨入了 informed ignorance. 这两种无知的另一个不同在于,第一种无知可以让人无知无畏,因为自己不会认识到这种无知。第二种反而让人小心翼翼,知道自己不懂这方面的知识,或者咨询专业人士,或者恶补相关的知识。我们人生下来,所有的知识都在脑袋的外部,所以,我们最初处于一个纯粹的 uninformed ignorance 状态, 所以,从无知到有知,必然要经过两个过程,第一个过程是从第一种无知变到第二种无知;第二种是消灭部分的第二类无知,达到部分有知。 这两个过程其实截然不同,但是实际上我们常常把他们混淆。

第一个过程其实是非常轻松愉快的过程,甚至不需要花太多的力气。有句话叫见多识广,就是说游山玩水也能增广见识。 在互联网发达的今天,随便点几个链接,随便查几个维基百科,都能够让人获得“增长见闻”的感觉。 这是一个好事,因为我们更加容易的发现自己的无知。 同时,在这个过程里也很容易有认知满足感。 所以,很多人不知不觉的觉得每天只要“增广见闻”就行了,轻松愉快又每天都有新的见闻输入,是多么美好的事情呀。不幸的是,这个过程至多只能让人 informed, 而不能让人 knowledgeable。 想要 knowledge, 绕不过去的是持久的,深入的,有系统的学习。更加不幸的是,这个过程是不那么轻松愉快的。

我上高中的时候非常喜欢数学,正好图书馆里面有大学数学书,我就不管看得懂看不懂都借来看,看着那些如“微分方程”,“复变函数”之类的名词觉得很欣喜,虽然是不断的发现自己以前的无知,却也觉得学到了新东西,新名词,新概念。可是总所周知,“看”是不需要花费任何脑力的,尤其是从不知道到知道自己不知道这个状态,简直就是所谓的顿悟(由此我也怀疑所谓的顿悟其实可能也是突然间觉得自己是个笨蛋,也就悟了)。 就这样,我一度以为自己在数学上是非常的 knowledgeable 了。 然后我大学上了数学系,我突然发现,高中看的那些书,虽然也看了,也仅仅是知道名词 ( informed ) 而已,真正的数学训练,还是等到我用书中知识做后面习题的时候才开始的,而这个过程才不是轻松愉快呢。 我不知道是不是普遍的情况,就我见到的同学,有很多高中原来很喜欢某个专业的,等到真的选了这个专业,突然就不喜欢了,这也是 be informed 和 be knowledgeable 两种认知过程不一样造成的。 这种两种认知过程,是不管怎么都没法互相替代的。换句话说,如果只想捡便宜果子吃,只做第一步,或者用第一步里面的那些轻松愉快来代替第二步,就想变成有知识的人,是不可能的。

缺少持久,系统和深入的学习,知识结构就会处于半调子的状态。 李笑来老师在学英语的若干文章中都提到精读和查字典的重要性。比如说,如果在学英语中满足于 informed ignorance, 遇到不认识的单词仅仅是猜一个意思,也不记下这个单词的用法的话,这个单词还是不能成为自己的词汇。然后,如果仅仅是记下用法,而不在以后有意识的练习使用(或者多次再见到)这个词的话,或许很快也就忘掉了。我们对学语言要系统的精耕细作很同意,但是未必能体会到所有其他学科都需要如此,尤其是在那些我们认为“简单”或者“零碎”的领域,我们往往像蜜蜂一样,成了不知疲倦的收集者,不断的 be informed, 而忘了 be knowledgeable 的背后,不是收集,而是学习。知道自己无知是一件非常好的事情,不过不要容忍处于 knowledge 和  be informed之间的尴尬处境,要不代理给专业人士,要不,抓紧时间学习,赶快从无知,到有知。

我父母和弟弟前段时间来参加我的婚礼。 签证和一切都比较顺利,所以好几个朋友都发信问我签证啊安排啊什么的,所以我干脆写一篇文章共享一下我的一些经验。

签证前
让他们办一张双币信用卡,让他们少带现金。 当然也看父母习惯, 比如我爸一向习惯用现金不刷卡,也无所谓,就是带大额现金换汇比较麻烦。

签证准备材料

156 表,157 表。 如果父母不懂英文,可以帮父母填然后 FedEx寄回去,注意核对一下信息的正确性,以及在他们该签名的地方提醒他们签名
158 表签证没有需要
资产证明: 我是让我父母开了一个存款证明,比我这里弄简单多了
学校的邀请信: 让学校国际学生办公室开
给签证官的信: 注意措辞,网上的所有模板几乎都有英语语法错误,不能照搬, 记得签名


需要你自己的

护照, I-20, I-94, SSN 复印件, 成绩单(in case) 学校/系证明你依然是学生的一个信

其他就没有了,网上说的还有啥啥材料的都是锦上添花的,比如照片什么的,不是必须的。
让父母不要紧张, 只要理由充分肯定能过.

旅行简要攻略:


1。 不要相信中国的交通设施的准时性,一定要提前到机场。 我父母来的当天上海地铁出事故了,幸亏他们随机应变,倒了很多次地铁才到了机场。
2。 在候机的时候,(如果父母不懂英语)让父母多和同机的乘客交谈,交朋友。 我父母就是遇到了好几个好心人,虽然不懂英语,一路有人家协助,很顺利。 还借手机让我父母打。
3。 提醒他们飞机上的食品中,沙拉是冷的。 我父母从来没吃过冷蔬菜。 飞机上有热茶,需要向空姐要求。
4。 随身就带护照等材料就行了,无需要随身带太多东西,不好管理。
5。 入关需要检查的材料里面包含回程机票,所以把机票打印出来随身携带。
6。 冬季航班总是会有延误的,让父母做好心理准备
7。 写一份简要的攻略,包含怎么填 I-94表,怎么填报关表,怎么联系你等等。

父母在美国的生活

1。 为他们买一个热水壶
2。 让他们不要大包小包的带药,美国的 OTC 非常便宜,效果也好。
3。 我父母喜欢到外边溜达,可以画一张家附近的地图和自己的紧急联系方式,让他们至少知道怎么溜达回家。更有钱的可以让父母带上一 GPS 或者 iPhone, 然后随他们走去哪个公园玩 :)
4。 家里有宠物的要考虑一下父母对宠物是不是过敏
5。 无论何时,谨慎驾驶

179 comments

结婚啦

啥也不说,先上我弟弟昨天拍的图

49 comments

隔墙花影动

中国大陆地区的互联网用户可以访问我的博客了,留言也多了起来,要谢谢各位读者老师继续关注。

我的博客于9月16日左右被封掉 IP (同时包括同一个服务器上所有的其他网站),不清楚为啥,也没去研究为啥。现在之所以能访问,原因很简单: 我花钱向美帝国主义控制下的主机服务商购买了独立 IP 主机服务,换了一个 IP 。而原来的IP,截止到今天,依然是被封杀的。 总的来说,封杀是某组织干的,我至今也不知道他们搞什么飞机。现在现在能访问是我自己花钱解决的,和某组织没关系。

为此,我不得不来专门宣传一下翻方法。 翻其实是一种古老且浪漫的行为。当年崔莺莺寄语张生:”待月西厢下,迎风户半开。隔墙花影动,疑是玉人来”。把女儿家含蓄的话翻译成现代就是: 你怎么不翻呢,不翻哪能见识到墙另一边的旖旎风光,和本小姐成一段良缘哩?不知道我的博客有没有崔莺莺小姐那样好看,不过想能永远看继续看毫无问题的看的各位,你要学会翻一。

方法其实很简单,用你的 Gmail 邮箱给 freeweb.tutorial@gmail.com 发封信,就知道怎么办了。该过程完全安全合法,无毒无害,不会让你肾结石或者被倒钩。

计算机需要数学,这是无庸置疑的。可是有些事情还是很 shocking. 比如,全世界的程序员都写函数式编程写得好好的,用着只要小学生就理解的 LOGO 升级版–LISP,突然一个哥们跑出来说,我们要用一个新玩意儿,叫做 monad. 不懂的人请翻开范畴论教科书第200页,估计一帮高中毕业就编程的人肯定要跳楼至死了,想弄懂范畴论没几年抽象数学的训练肯定是不可能的。做 model checking 的人也是,老老实实的状态空间搜索和约减问题嘛,最多就是一些逻辑条件和线性时序逻辑推来推去的,结果好了,突然跳出一行字,写着 XX拓扑和 YY同伦等几个大字,好像就是在考验你知不知道数学的数有四种写法。

更加狠的是,有个朋友,昨天给我带了本书,让我看着玩。我光看标题和目录觉得没啥兴趣。 因为这本书标题叫做《多方民主》,每章就是讲讲欧洲民主,以色列民主啥的。 然后我就随便翻了一页这么一看,神奇的事情发生了:里面全是数学公式。不是高中数学公式,不是 C+M 这样的“文科生”数学公式,是正常的需要大学本科数学知识才能看懂的数学公式。这本书表面上看是很”文科“的书,其实丫就是一本博弈论书以”文科“的面目出现。这样的书,让无数以为文科都是傻妞的人情何以堪啊?

当然,政治科学需要博弈论是显然的,Tit for Tat, IPD 和 ESS 也基本是政治学系的人发扬光大的,所以,这还不是最狠的。

我遇到的比较神奇的是上次我在旧书摊上捡了一本讲“经济和合同法”的法学书,原来是想借此了解一下美帝国主义的契约文化的,一开始也明明就是讲合同法的,可是10页往后, 突然话锋一转,就来了个纳什均衡和证明,然后下面就完全是定理了。 其实纳什均衡本来也不是什么复杂的东西,证明均衡也只要不动点定理,可是,有没有搞错,这是一本法学书哎,居然余下的那章都是在讲实变函数和纳什博弈!

好,现在我要讲最神奇的数学书了,是我昨天做梦梦到的,

我梦见我买了本 geek 菜谱,做两立方厘米的糖果的菜谱上写着 三次根号二 的大小的模具,附带一个开三次根的牛顿迭代法,我不得不用人肉开了一次立方根。咖喱牛肉中,牛肉和水的比例是1比根号2, 我在梦里不得不用无穷递降法,证明给我未婚妻看,不管她买多少有理数数量的牛肉和水,都不能配比成正好根号二这个无理数。 最变态的是做一个 Pie, 要我加 Pi 量的面粉才能做出半径为1的饼,旁边还附带了拉马努金老师的公式, 可是我这个菜鸟还是没编出那个高精度运算的程序…

数学书啊数学书,做梦你都不放过我。

在以前的文章中我介绍过囚徒困境,并且介绍了 Tit for Tat 策略,这种策略可以在多轮囚徒困境中不至于受益太差。那么,假如囚徒困境的游戏只有一轮呢? 有什么好的方法可以达到左上角那个双赢状态而不是左下角那个对两者都不是最优的状态呢?

囚徒困境是一个纯博弈论的模型,这个模型里面的赋值就直接决定了想要最大化自己利益的局中人必然会陷入困境,这是模型无法避免的。 所以想要跳出这个困境,只能靠博弈论之外的手段。 所幸的是,我们人类早就发现了这两种方法,并且都在实践中尝试过了这样两种方法。 第一种方法可以看成是直接的斩草除根法,即直接剥夺两个局中人选择“不合作”这个选项的自由,让他们都只有一个合作的选项。 这种政治学方法的优缺点在此我们不做讨论,我们关心的是第二种方法,一种经济学的方法–通过改变游戏受益矩阵,在新的游戏中,让局中人偏好合作。 在宏观经济的实践中,第二种的一般实现方法则是通过道德和法律手段对选择不合作的进行惩罚,对选择合作的实施奖励,以期改变整个收益矩阵,让这个收益矩阵不再满足囚徒困境的条件。 因为道德手段不确定太多,我们只考虑现代社会的最普遍手段,即法律手段。 具体来说,就是让局中人构建合同,并通过合同法等立法手段保护这个合同的实行,从而改变收益矩阵。

从博弈论的角度理解合同的话,通过订立合同,规定合同和法律效力,调控局中人不合作所获得的收益,使得局中人不再偏好”不守约定”选项。 具体的做法也很简单,估计聪明的各位早就想到了:

假定双方都选择合作则收益为 a, 而甲方合作,乙方背叛的时候,甲的收益是 b, 而乙的收益是 c。 按照我们的囚徒困境假设,背叛的收益 c 要大于合作的收益 a, 这样乙才会偏好背叛。 现在我们假设甲乙事先签订一个合同,规定背叛的一方要向合作(没有背叛)的一方支付损失。 我们假设这个值为 r。 显然的,现在乙背叛之后的收益就变成了 c-r, 而 甲合作的收益就是 b+r。 对于乙来说,我们的目的是要让他偏好合作,所以我们一定要让 a 大于等于 c-r。 最极限的情况就是 a = c-r, 于是, r = c-a。 这样, 乙的收益变成了 a, 而甲的收益变成了 b+c-a, 乙即使背叛也占不到好处,而甲也收到了合作的回报。

当然我这里说的是一个简化的模型。 不同的司法实践可能会取不同的 r 值,但是法的精神都是一样的,法律本身不限制你的选择,只是通过合理的奖励和惩罚,让理性的人自然的做出符合自己利益的选择。

从经济学角度来说,人类社会的运行中必然会有这样那样的博弈,尤其是市场经济发达的现代社会,可以说博弈无处不在, 而避免如囚徒困境这样的博弈情景也是社会效率所必须的。 如果单纯地剥夺局中人的选择权,通过”下一盘很大的棋”的方式去掉博弈选项,逃避囚徒困境, 那么局中人就可能不能完成充分博弈,利益得不到最大化。 而事实也证明, 这种方法在实践中效率不够高,因为人类社会运行这盘旗完全复杂到任何人都不能全盘掌控, 而且很容易就造成哈耶克说的”通向奴役之路”。 而法律为我们提供了另一种截然不同的思路,即仍然保持博弈,但调控收益矩阵,这样,仍然保证了合同双方的博弈选择自由。 在合同法和自由的关系的阐述上, 西方学者马克思韦伯曾经说过一段著名的话: “规范合同双方的那些法律的发展,以及在规范的框架下允许自由意志的法律的充分发展,往往被视为个人自由发展的标志[1]“。  通过对囚徒困境的解决方法和韦伯的这句话,应该不难理解为什么市场经济发达的国家恰好就法律制度健全,且恰好有较多的个人自由。

—-

[1] 这个自由具体来说叫做 Freedom of Contract, 有兴趣的读者可以阅读  “Max Weber on Law in Economy and Society”

A People’s History of the Supreme Court 这本书很有意思,虽然是讲美国最高法院的历史的,却在前7章全是讲美国宪法的制定里的各种曲折和争议,读起来让人唏嘘不已,在读书过程中零散的做了一些笔记,如下:

1776 年独立宣言发表后, 美国一直和英国打独立战争,一直打到 1783 年和英国在巴黎签订和和平协议,才算真的建立了和平的国家。这场仗打完以后,老兵和军官居然都回家了,没有一个人跑出来说自己打下的江山自己坐。

在这场独立战争过程中,十三个殖民地在1781年通过了 The Articles of Confederation, 组建了一个松散的中央政府,这个中央政府除了管理军队和发行货币外,什么权力也没有,连中央政府的财政经费,都要州捐助。

这样一个中央政府在处理州的事物上十分没有权力。当时有几个州为了边界上的一些河流的归属闹得不可开交,而中央政府居然没有足够的权力去协调。不少国父看到这种现象,决定组建一个强有力的中央政府,也就是美利坚合众国联邦政府,这帮人,被称为联邦党人。

联邦党人组建中央政府的努力,落实在行动上,就是1787年的费城制宪会议。 来自12 个殖民地的代表在费城的某个楼里面,天天吵架,几乎把宪法的每个条文都辩论了一次,最后才有了美国宪法。

1787 年的这场吵架,被 James Madison 翔实的记载下来了,书店里可以买到全书,也可以在网上看到当时吵架的内容, 比如 http://teachingamericanhistory.org/convention/debates/ 美国的历史虽然短,但是文书都透明公开,很方便历史研究。

这些吵架中间的妥协很有意思,举两个例子: 1, 南方的州拥有较多的奴隶,就想把这些奴隶算上充数,这样在国会就有更大的代表权; 北方的州不同意,认为你南方把奴隶当物品,那就和牛,马宠物没区别,不能算人;你想算人头,他们就是自由民,不算财产。 南方一方面不承认奴隶的公民权力,一方面有把他们当人算代表,在逻辑上非常不自恰; 但是如果不承认奴隶代表权,南方估计也不会通过宪法,所以,最后两方面各让一步,每个奴隶算 3/5 的代表。这就是美国宪法上著名的 3/5 人的由来。 2, 小州和大州之间妥协。 小州怕自己代表太少,利益被侵犯;大州认为自己人多,就该代表多; 妥协的结果是在上院各自两个代表,下院按人口。 又有代表认为自己州人口增长迅速,要求更多席位,所以最后宪法加一条修正案: 每十年人口普查一次。 虽然这条修正案没有获得通过,但是已成为联邦政府标准实践 (我以前的文章里也讲过这个简单的一个条文,是怎样催生了 IBM 的)。

有一些历史学家认为当年美国这些国父制宪的动机是一个强有力的中央政府对于他们的个人利益有益。 这些人的不同的个人利益交织到一起,就形成了针锋相对的观点。 这些观点和利益通过制宪会议得到了均衡。因为各种意见得到表达,所以宪法达到了近乎完美。 当时已经在轮椅上的本杰明 富兰克林在立宪会议闭幕的时候动情的说: 我承认我不同意这个宪法的很多部分,但我不确定我是否应该永远不同意这些部分… 先生们, 我同意这个宪法,包括它的所有可能错误。 我也怀疑任何一个其他的”立宪会议”,能制定出一部更好的《宪法》… 我发现这个宪法竟能这样接近完美, 甚至能使我们的敌人也感到惊奇。

即使参与宪法制定的一些代表,最后也有几个拒绝在宪法上签字,因为他们觉得对宪法不满意。 而对宪法不满意的一位叫 Edmund Randolph 的代表,也是弗吉尼亚州的州长,最后却真诚的建议只要宪法在 9 个殖民地公投获得通过就算生效,丝毫不计较一定要自己的州通过。

立宪会议的代表提到了很多提案,这些提案在细节上有很大的不同,但是所有的人都支持三权分立,支持一个独立的联邦最高司法机构,也就是最高法院。 宪法中关于最高法院拥有违宪审查权力的条款是极少几条没有任何反对意见一致通过的,可见这些立宪者对于独立司法制度的重要性认识深刻。 其实这也和代表的背景有关,这些国父,基本都不是什么所谓的”秘书”、”秀才”,而是专业的律师。

华盛顿总统在做了两届总统之后,认为长期霸占总统颇为无趣,因此退位让贤,开创了总统连任不超过两届的不成文范例,美国政府的权力交接从一开始就成为了范例。 华盛顿之后是亚当斯,也是联邦党人; 亚当斯之后就是著名的托马斯杰弗逊,是反联邦党人。 杰弗逊当选总统,是一件非常重要的事件,这是人类历史上第一次以权力以民主的方式完成和平交接。

托马斯杰弗逊在没做总统前,一直大喊权力法案,支持最高法院的独立司法,可是他当上总统第一天就遇到了一件神奇的案子。 这个神奇的案子是这样的,话说亚当斯当总统的最后几天,知道自己离下台不远了,就和联邦党人控制的国会一起通过了一个法令,临时成立了很多联邦地方法院,临时任命了一堆联邦党人做法官。 这个事情他们没做好,有一个叫做 Marbury 的法官的委任书他们前一天忘了发了。 等到杰弗逊第二天上台,江山变了,杰弗逊就让他的手下 Madison 不发委任状。 这下 Marbury 就当不了官了,于是,火了, 就把不给发委任状的,日后是美国第四任总统的 Madison 给告上了。 这个案子就闹到了最高法院。 最高法院的判决一共三条, 前两条是让托马斯杰弗逊不高兴的,因为这个判决直接指明总统没有权力不发委任书。 最后一条是看上去最八杆子打不着但是最重要的: 最高法院在应用某项法令的时候,居然发现这个法令违反了宪法,于是很牛逼的把几年前联邦党人通过的一项法令以违反宪法为由给废止了! 是的,这就是美国最高法院历史上最早的一起著名判例,即 Marbury vs. Madison. 在这个著名的判例中,最高法院的大法官 Marshall 说:”判定什么是法律是断然属于司法部门的权限和职责”, 这句话,被刻在美国最高法院的墙上。 这个事件,是人类历史上第一次由司法机关提到”违宪审查” 这个概念。

从杰弗逊起草独立宣言,到杰弗逊当选总统并买了路易斯安娜,经过无数的妥协,争吵和辩论,大大小小的战争和利益较量,美利坚合众国强力的中央政府已经构建完毕,三权分立的架构也已经初具雏形,制约和均衡让政府失去了对人民作恶的力量, 两党之间权力的民主交接也顺利完成。民有,民治,民享的国家在北美大陆初步建立完毕,美利坚建国大业至此大致完成。