[Engineering] 设计模式奏鸣曲(八):要不要相信类型

1. 一致性

直觉主义逻辑不承认经典逻辑中的排中律——对于任意命题P,或者P真,或者¬P为真。
但是和经典逻辑一样,接受无矛盾律——任何命题P,P和¬P不能同时为真。

无矛盾的逻辑系统,称为一致的,或者协调的。
一个有用的逻辑系统不能包含矛盾。

2. 完备性

上文关于一致性的讨论中,我们并没有区分逻辑公式的证明语义
所谓证明,就是一串符号推导序列,从一些合法的公式经过一步或多步,推导出另一些合法的公式。

而公式的语义则是人为选择的,人们倾向于为公式选择可靠的语义,
即,所有可证的公式,在语义上都为真。

但是可靠性并不意味着完备性
即,所有语义上为真的命题,并不一定总是可证的。

3. 第一第二不完备性定理

人们在研究逻辑系统的时候,对一致性完备性有着很强烈的追求,
谁都希望自己发明的逻辑系统中没有矛盾,而且所有为真的命题都可证。

但是1931年,哥德尔发现了两个定理,粉碎了这个幻想,

任何相容的形式系统,只要蕴涵皮亚诺算术公理,就可以在其中构造在体系中不能被证明的真命题,因此通过推演不能得到所有真命题(即体系是不完备的)。
—— 哥德尔第一不完备性定理

哥德尔定理,给出了符号推导方法的局限性,
如果要求系统无矛盾,那么某些事实可能是不可证的。

此外,哥德尔第二不完备性定理指出,

任何逻辑自洽的形式系统,只要蕴涵皮亚诺算术公理,它就不能用于证明它本身的相容性。

好吧,连自身的一致性,也不能在系统之内证明了。

所以,在软件开发过程中,检查一个软件系统是否符合设计要求,所使用的方法就是对它进行测试,在这个软件系统之外进行证明。

4. 排除错误

在使用编程语言的时候,我们都或多或少的接触过类型这个概念。
类型系统的一个重要作用就是,通过类型检查排除可能会发生的错误。

和逻辑系统一样,如果类型系统保证所有良类型的程序都按预期正常表现,
我们就说它是可靠的
这是一个很好的性质,如果A成立,则B成立,建立了符号行为之间的联系。

不幸的是,程序即使经过了类型检查,
也保证不了那些不在预期范围之内的特性,
即,如果A成立,则C是否成立,我们是不确定的。

例如,对除法表达式进行简单的类型检查,能保证除法操作数的类型合法,
但无法避免除0错误,
这可能需要更强大的类型系统才行。

另一方面,上面提到良类型的程序,预期会表现正常。
但是,类型不合法的程序,却未必会出错。
如果A不成立,那么B是否成立也是不确定的。

这两件事和停机问题是一脉相承的,
对于图灵完备的编程语言来说,要想判定一段程序的所有运行时特征,唯一的办法运行它,仅依赖静态检查是行不通的。

不存在通用的过程,来判断一段程序是否停机。

5. Believe the type

那么我们还要相信类型吗?
要相信。

我们要相信类型系统,可以帮我们排除那些已被证明的错误。
相信类型系统,能指导我们设计出一致的软件。

Show me your type, and I'll show you your language.

然而,类型信息却不等同于文档,它只能提供一些辅助信息,
它不是用来传递知识的,真是如有雷同,实属巧合,
这恰恰反映了在知识传递方面,所做的工作还不够。

结语

本文从逻辑系统出发,介绍了人们经常提及的一些特性,
包括一致性,完备性,可靠性,进而还介绍了哥德尔不完备性定理。

类型检查可看做是一种逻辑推导,
它可以排除某些已知的错误,但也不是万能的。

要想写出高质量的代码,除了在设计方面多花一些心思之外,
更好的办法就是对它进行测试,不论是静态检查还是运行时检查,
不论是自动化的单元测试,还是人工测试

完全依赖设计检查是行不通的,有时候唯一可以发现错误的办法就是运行它。


参考

计算机科学中的现代逻辑学
离散数学教程
数理逻辑
Type Systems
Type-driven Development with Idris

直觉主义逻辑
排中律
无矛盾律
可靠性
完备性
哥德尔不完备性定理
停机问题

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

推荐阅读更多精彩内容