MU

我曾经跟赵余说过,《歌德尔,埃舍尔,巴赫,集异璧之大成》和《计算机程序的构造与解释》同看,就像同时吃花生米和豆腐干一样相得益彰。实际上这其中每一本都让我高潮连连。我一直找不到更合适的比喻,直到看到《华尔街之狼》里 Leonardo怎样贯通了性与毒品。

用一个小例子来一窥堂奥。

这个小例子叫MU谜题,它出现在《GEB》的第一章。这个谜题是“你能产生MU么?”一开始的时候,我们有一个符号串WI,有下面几个规则:

1,如果一个归你所有的符号串结尾是I,则可以在后面加上一个U。

2,如果有Mx,那么Mxx也归你所有。e.g.:MUI=>MUIUI

3,如果符号串中有III,那么可以用U代替III。

4,如果符号串中有UU,那么可以去掉它。

规则就是这些,现在可以试试找出MU了,能够找出来的第一个人请把应用规则的序列方式告诉我,我请他吃饭并分享这其中的况味。

这是一个简单的形式系统,在这个形式系统中,MI被称为”公理“,由它产生出的符号串被称作”定理“。四条规则被称作”推理规则“。由”公理“出发依次利用”推理规则“得到某”定理“的过程被称为"推导”。"推导“这一概念是向”证明“概念看齐的,但比后者要朴素一点。

这种定义明晰的重复性工作最适合用电脑来做。

我的默认语言是scheme。判断一个语言好坏有很多标准,我倾向于选择其中最直观的一个,那就是在描述众多具有普遍意义的问题时,代码总长度最短的是最好的。关于这个直觉我在之前的一篇讨论什么是更好的语言(不只是程序语言)时阐述过。

——talk is cheap, show me the code——

定义“公理”

(define init (list (list 'm 'i)))

定义“推理规则”

(define (operator lis)

(define (rule_1 x)

(define (end lis)

(if (null? (cdr lis)) (car lis) (end (cdr lis))))

(if (eq? (end x) 'i) (append x (list u))))

(define (rule_2 x)

(append x (cdr x)))

(define (rule_3 x)

(cond ((> (length x) 3)

(cond ((and (eq? (cadr x) 'i) (eq? (caddr x) 'i) (eq? (cadddr x) 'i)) (append (list 'm 'u) (cddddr x)))

(else '())))

(else '())))

(define (rule_4 x)

(cond ((or (null? x) (null? (cdr x))) x)

((and (eq? (car x) 'u) (eq? (cadr x) 'u)) (rule_4 (cddr x)))

(else (cons (car x) (rule_4 (cdr x))))))

(define (erase seq)

(filter (lambda(x) (not (null? x))) seq))

(erase (list (rule_1 lis) (rule_2 lis) (rule_3 lis) (rule_4 lis)))

)

定义“记忆”

(define dictionary init)

(define (in? value lis)

(or (equal? value (car lis)) (and (not (null? (cdr lis))) (in? value (cdr lis)))))

定义“推导”

(define (expand seqs)

(define (erase_repeat lis)

(cond ((null? lis) '())

(else (cons (car lis) (filter (lambda(x) (not (equal? x (car lis)))) (erase_repeat (cdr lis)))))))

(define (pre-expand lis)

(if (null? lis)

'()

(append (operator (car lis))

(pre-expand (cdr lis)))))

(define result (filter (lambda(x) (not (in? x dictionary))) (erase_repeat (pre-expand seqs))))

(begin

(set! dictionary (append dictionary result))

result))

检验目标”定理“是否能够被”推导“出来

(define object (list 'm 'u))

(define (f a)

(if (in? object a) 'yeah (f (expand a))))

(f init)

——talk is not cheap,it turns into code——

在接受了“公理”和“推理规则”之后,我们可以选择盲目地试一试,在不知不觉中理解这套规则,也可以用scheme来翻译这套规则。两种方式都很必要。在进行前者时会产生一种微妙的心理活动,即跳出这个形式系统,看看我们到底在做什么,系统中暗含了哪些抽象的现象,比如,只有三个字母,每个字符串开头都是M,等等,这种现象在GEB中被称作metathinking。第二种思考方式,相应地,就是thinking within the system, 在scheme优良的抽象风格下,系统显示出了其内部的结构。接下来重点阐述后者。

我们首先定义了“公理”,并将“公理”作为唯一一条语句写入了一个“知识库”,然后尝试将四条“推理规则”应用于“公理”,合理的应用结果作为”一级定理“,一方面被写入“知识库”,另一方面作为"二级定理"的母定理,即继续进行”推理“的材料使用,直到某一级定理包含了目标定理,整个推理过程结束。挺笨的。如果一个人掉入了所谓的”思维定势“,他就变得像这段程序一样笨了。我们来看一下结果:

1 ]=> (expand init)

;Value 12: ((m i u) (m i i))

1 ]=> dictionary

;Value 13: ((m i) (m i u) (m i i))

1 ]=> (expand (expand (expand init)))

;Value 14: ((m i u u u) (m i u u i u u) (m i u u i u) (m i u i u i u i u) (m i u u i) (m i u i i u i) (m i u i i i) (m i i i i i i i i) (m u i))

1 ]=> dictionary

;Value 15: ((m i) (m i u) (m i i) (m i u u) (m i u i u) (m i u i) (m i i i i) (m i u u u) (m i u u i u u) (m i u u i u) (m i u i u i u i u) (m i u u i) (m i u i i u i) (m i u i i i) (m i i i i i i i i) (m u i))

1 ]=> (f init)

;Aborting!: out of memory

;GC #97: took: 0.80 (35%) CPU time, 0.80 (36%) real time; free: 2752857

;GC #98: took: 0.70 (88%) CPU time, 0.70 (99%) real time; free: 2752937

多么遗憾呢。StackOverFlow。其实这不难理解。如果那么容易就能推导出来,我怎么会许下请你吃饭的诺言呢。

在字符串复杂到一定程度之后,每一条“推理规则”都是合理的,因为每一条“推理规则”合理应用于某一字符串都只产生一条“定理”(这里没有考虑延迟应用),即”n级定理"的数目是“(n-1)级定理”数目的4的(n-1)次方倍。"0级定理“,即“公理”,有1个,则n级定理有4^n个。如果不过滤重复定理的话,在经过n次“推导”后“知识库”里的“定理”数目大概是1/3(4^(n+1)-1)个。

Bomb!

”推导“需要metathinking。我们在摸索的时候,系统的模式会悄无声息地浮现在脑海中。你不仅可以看出这个模式,而且通过检查那些规则,还可以理解这个模式。这展示了人与机器的区别。这个区别在于:机器有可能在做某件事情时不去观察,而人不可能不去观察。能够跳出正在进行的工作并且看一下已经做了些什么,这是智能固有的特点。

我已经不知道自己抄了多少GEB中的句子了,如果可以,我想把它全文打下来,用scheme去解释里面的每一个小故事。

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

推荐阅读更多精彩内容