命题与类型

丘奇和计算理论

逻辑【Loginc】起源于古希腊的亚里士多德和斯多葛学派、中世纪的奥卡姆和的经院学院【scholastics】,以及莱布尼茨在启蒙之初关于推理演算【calculus ratiocinator】的设想。 我们对这门学科的兴趣在于形式逻辑【formal logic】,这源于布尔【Boole】、德·摩根【De Morgan】、弗雷格【Freg】、皮尔斯【Peirce】、皮阿诺【 Peano】等人在19世纪的贡献。

20世纪初,怀特海德【Whitehead】和罗素【Rullel】的《数学原理【Principia Mathematica】》证明了形式逻辑【formal  logic】可以表达数学的很大一部分。受此启发, 希尔伯特【Hilbert】和他在哥廷根的同事成为形式逻辑的主要支持者,旨在为其奠定坚实的基础。  

希尔伯特方案【Hilbert’s Program】的一个目标是解决 Entscheidungsproblem(判定问题),即开发一个“有效可计算性【effectively calculable】”的程序【procedure】来确定任何陈述【statement】的真假【truth or falsity】。 这个问题的前提是 完备性【completeness】:对于任何陈述【statement】,无论是它还是它的否定,都必然拥有一个证明【proof】。 1930年在哥尼斯堡召开的数学大会上,希尔伯特在演讲中重申了他对这一原则的信念,并总结道:“我们必须知道,我们将会知道【Wir mussen wissen, Wir werden wissen】”,也许把这些话刻在墓碑上是合适的,年轻的奥地利数理逻辑学家哥德尔获得了否定的结果,证明了希尔伯特方案是不可能实现的。

虽然目标是满足希尔伯特方案【Hilbert’s Program】,但不需要“有效可计算性【effectively calculable】”的精确定义。 一个给定的程序【procedure】是否有效【effective】是很清楚的,就像斯图尔特法官对淫秽的描述一样,“我一看到它就知道【“I know it when I see it】”。 但是要证明 Entscheidungsproblem 不可判定,需要对“有效可计算性【effectively calculable】”进行正式定义。

人们可以在欧几里得【Euclid】和花里兹米【al-Khwarizmi】的著作中找到算法概念的影子,但是这个概念直到20世纪才正式确立,然后同时得到逻辑学家的三个独立定义。 就像公共汽车:你等了两千年才得到“有效可计算性【effectively calculable】”的定义,然后还突然出现了三个独立定义。 这三个独立定义分别是:

  • Lambda演算【lambda calculus】,1936 年由阿朗佐·丘奇【Alonzo Church】发表;
  • 递归函数【, recursive functions】,1934年由哥德尔【Godel 】在普林斯顿的演讲中提出,并由斯蒂芬·克林【 Stephen Kleene】于 1936 年发表; 
  • 图灵机【Turing machines】,1937年由 Alan Turing 发表。

Lambda演算【lambda calculus】由丘奇在普林斯顿大学发表,并由他的学生 Rosser 和 Kleene 进一步发展。 作为逻辑学研究中心,普林斯顿与哥廷根不相上下。 高等研究院和数学系一起设在芬恩厅【Fine Hall】。1933年,爱因斯坦和冯·诺伊曼加入研究所,哥德尔到访。  

长期以来,逻辑学家一直关注函数【function】的概念。 Lambda演算【Lambda calculus】为函数【function】提供了简洁的符号,包括可能作为其他函数的参数或结果出现的"头等【first-class】"函数。 它非常紧凑,只包含三个结构:变量【variables】、函数抽象【function abstraction】和函数应用【function application】。 丘奇最初引入 Lambda演算【lambda calculus】,是为了作为一种新的逻辑表述方法,来为逻辑公式(几乎像宏语言)定义符号。  所有形式的绑定变量【 bound variable】都可以归入 lambda 绑定【lambda binding】。 (例如 ∃x. A[x],,Church写作 Σ(λx) [x]))。 然而,后来 Kleene 和 Rosser 发现丘奇的系统是不一致【inconsistency】的。此时,丘奇和他的学生已经意识到该系统具有独立的价值。 丘奇在他关于这个问题的第一篇论文中就预见到了这种可能性,他写道 “实际上,除了用作逻辑之外,该系统【system】可能还有其他应用”  。

Church 发现了一种将数字编码为 lambda 演算项【lambda calculus term】的方法。 数字 n 可以由一个函数表示,该函数接受一个函数 f 和一个值 x,并将该函数应用于该值 n 次(例如,3 可以表示为 λf. λx. f(f(f(x))).)。通过这种表示,可以很容易地编码可以加【add】或乘【multiply】的 lambda 项【 lambda terms】,但还不清楚如何编码前驱函数【predecessor】 , 找出比给定数字小 1 的数字。一天,在牙医办公室里,克林【Kleene】突然明白了怎样定义前驱函数【predecessor】。 当克林【Kleene】把结果告诉他的指导员时,丘奇透露,他几乎说服自己,在 lambda 演算中表示前驱函数【predecessor】是不可能的。 一旦克服了这个障碍,丘奇和他的学生很快就确信,任何“有效可计算性【effectively calculable】”的数字函数都都可以用 lambda 演算中的一个项【term】来表示 。

丘奇提出了 λ 可定义性【 λ-definability 】作为“有效可计算”的定义,即我们现在所熟知的丘奇命题【Church's Thesis】,并证明了存在一个问题,其解不是λ 可定义性【 λ-definability 】,即确定给定的 Lambda项【 λ-term 】是否具有范式【 normal form】,我们现在所知的停机问题【Halting Problem】。一年后,他证明了 Entscheidungsproblem 没有λ 可定义性【 λ-definability 】的解。

1933 年,哥德尔来到普林斯顿访问, 丘奇的论点认为每个有效可计算性的函数【effectively calculable function】都是λ 可定义性【 λ-definability 】的,但哥德尔对此并不信服。 丘奇回应说,如果哥德尔能够提出不同的定义,丘奇将“承诺证明它包含在λ 可定义性【 λ-definability 】中”。 在 1934 年普林斯顿的一系列讲座中,根据 Herbrand 的建议,哥德尔提出了后来众所周知的“一般递归函数【general recursive functions】”作为他的有效可计算性【 effective calculability】的候选者。 克林【Kleene 】做了笔记并发表了该定义。 丘奇他的学生很快确定这两个定义是等价的:每个一般递归函数【general recursive function】都是λ 可定义性【 λ-definability 】的,反之亦然。 该证明由丘奇概述并由克林【 Kleene 】详细发表。 这个结果并没有安抚哥德尔,反而让他怀疑自己的定义是否正确! 事情陷入了僵局。

与此同时,在剑桥大学,马克斯·纽曼的学生艾伦·图灵以我们现在称为图灵机的形式独立地表述了他自己的“有效可计算性【effectively calculable】”的概念,并用它来证明 Entscheidungsproblem 不可判定。 在论文发表之前,纽曼沮丧地发现丘奇抢先了图灵。 然而,图灵的方法与丘奇的完全不同,值得独立发表。 图灵匆忙添加了一个附录,概述了与 λ 可定义性【 λ-definability 】的等价性,他的论文在丘奇发表一年后出版,当时图灵 23 岁。纽曼安排图灵前往普林斯顿,在那里他在丘奇的指导下完成了博士学位 。

图灵与丘奇最显着的区别不在于逻辑或数学,而在于哲学。丘奇只是提出了 λ 可定义性【 λ-definability 】的定义,并大胆地声称它对应于有效可计算性【effectively calculable】,而图灵则对“计算机【computer】”的能力进行了分析——此时,“计算机【computer】”是在纸和铅笔的帮助下进行计算的人。图灵认为符号的数量一定是有限的(因为如果是无限的话,一些符号就会任意接近彼此,无法区分),意识状态【states of mind 】的数量也一定是有限的(出于相同的原因),并且在某一时刻考虑的符号数量必须是有界的(“我们无法一眼看出 9999999999999999 和 999999999999999 是否相同”)。后来,Gandy [18] 指出,图灵的论证相当于一个定理,并断言人类用纸和笔可以执行的任何计算,都可以由图灵机完成。正是图灵的论证最终说服了哥德尔;由于 λ 可定义性【 λ-definability 】、递归函数【recursive functions】和图灵机【Turing machines】已被证明是等价的,他现在接受了这三种定义都是“有效可计算性”的观点。

如前所述,丘奇第一次使用 lambda 演算【lambda calculus】是为了对逻辑公式进行编码,但不得不放弃,因为它会导致不一致【inconsistency】。 失败的原因与罗素悖论有关,即系统【system 】允许谓词作用于自身,因此丘奇采用了类似于罗素的解决方案,即根据类型对项【terms】进行分类。 丘奇的简单类型 lambda 演算【lambda calculus】排除了自我应用,允许 lambda 演算【lambda calculus】支持一致的逻辑公式【consistent logical formulation】。

罗素逻辑中的自应用【self-application】导致悖论,而丘奇的无类型 lambda 演算【untyped lambda calculus】中的自应用【self-application】导致非终止计算【non-terminating computations】。 相反,丘奇的简单类型 lambda 演算【simply-typed lambda calculus】保证每一项【term 】都有一个范式【normal form】,即对应于一个停止【halts】的计算。

lambda 演算【lambda calculus】的两种应用,即表示计算【represent computatio】和表示逻辑【represent logic】,在某种意义上是相互排斥的。 如果一个计算的概念强大到足以表示任何有效可计算过程【effectively calculable procedure】,那么这个概念就不足以解决其自身的停止问题【Halting Problem】:没有一个有效可计算性过程【effectively calculable procedure】来确定一个给定的有效可计算性过程【effectively calculable procedure】是否终止。 然而,基于简单类型 lambda 演算的丘奇逻辑的一致性取决于每个项【term】都具有范式【normal form】。

无类型 lambda 演算【untyped lambda calculus】或带有一般递归构造【a construct for general recursion】(有时称为定点运算符【 fixpoint operator】)的类型化 lambda 演算【typed lambda calculus】允许定义任何有效的可计算函数,但存在无法解决的停机问题【Halting Problem】。 没有一般递归构造【a construct for general recursion】的类型化 lambda 演算【Typed lambda calculus】有一个微不足道的停止问题【Halting Problem】——每个程序都停止!——但不能定义一些有效可计算性函数【effectively computable function】。 两种演算都有其用途,具体取决于预期的应用。

除了对编程语言的基本贡献外,丘奇还对硬件验证【hardware verification 】和模型检查【 model checking】做出了早期贡献,如 Cardi 所述。

根岑和证明理论

希尔伯特方案【Hilbert’s program】的第二个目标是建立各种逻辑的一致性【consistency 】。 如果逻辑不一致【inconsistent】,那么它可以推导出任何公式,使其无用。

1935年,在他 25 岁的时候,格哈德·根岑【Gerhard Gentzen】提出了不是一个而是两个新的逻辑公式:自然演绎【natural deduction】和顺序演绎【 sequent calculus】。这两种公式成为了制定一个逻辑的两大系统,并一直延续到今天。他展示了如何将证明规范化,以确保它们不是“迂回【roundabout】”的,从而为希尔伯特系统的一致性提供了新的证明。而且,最重要的是,为了配合 Peano 引入的存在量化符号 ∃ 的使用,根岑引入了符号 ∀ 来表示全称量化。 他将蕴涵写为 A ⊃ B(如果 A 成立则 B 成立),合取【 conjunction 】为 A & B(A 和 B 都成立),以及析取【disjunction】为 A ∨ B(至少 A 或 B 之一成立)。

根岑的见解是,证明规则【proof rules】应该成对出现,这是早期系统(如希尔伯特方案的系统)中不存在的特征。 在自然演绎中,这些是引入【introduction】和消除【elimination 】对。 一个引入规则【introduction rule】指定在什么情况下可以断言带有逻辑连接词的公式(例如,为了证明 A ⊃ B,可以假设 A,然后必须证明 B),而相应的消除规则【elimination rule】则说明如何使用该逻辑连接词( 例如,从 A ⊃ B 的证明和 A 的证明可以推导出 B,这是中世纪称为假言推理【modus ponens】的性质)。 正如根岑指出的那样,“引入【introduction】可以说是相关符号的‘定义’,归根到底,消除【 eliminations 】只是这些定义的结果。”

这一见解的一个结果是,任何证明都可以归一化【normalised】为一个非“迂回【roundabout】”的证明,即“除了在最终结果中包含的概念外,没有任何概念进入证明”。例如,在公式 A & B 的归一化证明中 ,唯一可能出现的公式是其自身及其子公, A and B,以及 A and B 本身的子公式。 不可能出现其他公式,例如 (B & A) ⊃ (A & B) 或 A ∨ B; 这称为子公式原则【Subformula Principle】。 一个直接的结果是一致性【consistency】。 证明 false 是一个矛盾【 contradiction 】,写作 ⊥ 。 推导出矛盾的唯一方法就是证明【proof】,比如说,对于某个公式 A,A ⊃ ⊥ 和 A 都成立。但是给定这样的证明【proof】,我们可以将其归一化【normalise 】为仅包含其结论⊥ 的子公式的公式。 但是 ⊥ 没有子公式!就像那句老话:“你不明白"不"是什么意思吗【what part of no don't you understand?】?”由于其在建立一致性方面的作用,逻辑学家开始对证明的归一化【normalisation 】感兴趣。

矛盾证明【Proof by contradiction】:在逻辑学和数学中,矛盾证明是一种证明形式,通过证明假设命题为假会导致矛盾,从而确立命题的真理或有效性。

根岑更喜欢自然演绎【Natural Deduction】系统,因为在他看来,它更自然。 他引入相继式演算【Sequent Calculus】主要是作为证明子公式原理的技术工具,尽管它具有独立的兴趣。

相继式演算【Sequent Calculus】有两个关键属性。 首先,自然演绎中的每一个证明都可以转化为相继式演算【Sequent Calculus】中的证明,反之亦然,所以这两个系统是等价的。 其次,与自然演绎不同,每一条规则都具有这样的性质,即它的假设只涉及出现在其结论中的那些子公式。,但有一个例外,即 Cut 规则,总是可以通过称为 Cut 消除【Cut Elimination】的过程来删除。 因此,每个证明都有一个满足子公式原理【Subformula Principle】的等效范式。根岑对相继式演算【Sequent Calculus】的主要兴趣是证明子公式原理【Subformula Principle】,尽管相继式演算【Sequent Calculus】还具有其他独立兴趣的特征,例如为古典逻辑提供更对称的表示,而且今天的研究人员经常使用更接近于相继式演算【Sequent Calculus】的公式,而不是自然演算。

具有讽刺意味的是,为了证明自然演绎的子公式原理【Subformula Principle】,根岑需要引入相继式演算【Sequent Calculus】。 他需要一个迂回证明【roundabout proof】来证明没有迂回证明【the absence of roundabout proofs】! 后来,在 1965 年,Prawitz 通过引入一种简化自然演绎证明的方法,展示了如何直接证明子公式原理【Subformula Principle】; 这为下一节中描述的霍华德【Howard】 的工作奠定了基础。

Propositions as Types

1934 年,柯里【Curry】观察到一个奇怪的事实,将函数理论【a theory of functions】与蕴涵理论【 a theory of implication】联系起来。 函数 (A → B) 的每种类型,都可以解读为一个命题 (A ⊃ B),在这种解读下,任何给定函数的类型总是对应于一个可证明的命题。 相反,对于每个可证明的命题,都有一个具有相应类型的函数。 随后,柯里【Curry】和 Feys 将对应关系从类型【types】和命题扩展到项【term】和证明【propositions 】【proof】,并暗示了项【terms】的求值【evaluation 】和证明【proof】的化简【simplification 】之间的关系。

1969年,霍华德传阅了一份影印的手稿。直到1980年,它才被发表在献给库里的纪念文集上。受柯里【Curry】观察的启发,霍华德【Howard】指出,自然演绎和简单类型的lambda演算【simply-typed lambda calculus】之间有类似的对应关系,他明确了第三层也是最深层的对应关系,正如引言中所述,证明的化简对应于于程序的求值【simplification of proofs corresponds to evaluation of programs】。霍华德将对应关系扩展到其他逻辑连接词,合取【 conjunction 】和析取【disjunction】,通过用表示序对【pairs】和不相交和【disjoint sums】的结构【constructs 】扩展他的lambda演算【lambda calculus】。正如证明规则【 proof rules】以引入【introduction】和消除【elimination 】序对的形式出现一样,类型规则【typing rules】也是如此:引入规则对应于定义或构造【 define or construct】给定类型值的方法,消除规则对应于使用或解构【use or deconstruct】给定类型值的方法。

我们可以这样描述霍华德【Howard】的观察结果:

  • 合取【 conjunction 】A & B 对应于笛卡尔积 A × B,即具有两个字段【field】的记录【record】,也称为序对。 命题【proposition】 A & B 的证明【proof 】由 A 的证明和 B 的证明组成。 类似地,类型 A × B 的值由类型 A 的值和类型 B 的值组成
  • 析取【disjunction 】 A ∨ B 对应于不相交和【disjoint sum】 A + B,即具有两个选择的变体。 命题【proposition】 A∨B 的证明由 A 的证明或 B 的证明组成,包括对两者中哪一个得到了证明的指示。 类似地,类型 A + B 的值由类型 A 的值或类型 B 的值组成,包括指示这是左加数还是右被加数。
  • 蕴涵 A ⊃ B 对应于函数空间 A → B。 命题 A ⊃ B 的证明由一个过程【procedure 】组成,即给定 A 的证明就产生 B 的证明。类似地,类型 A → B 的值由一个函数组成,当应用于类型 A 的值时,返回类型 B 的值。

这种对证明的解读可以追溯到直觉主义,通常被称为 BHK释义,以 Brouwer、Heyting 和 Kolmogorov 的名字命名。 Brouwer 创立了直觉主义 ,Heyting 和 Kolmogorov 将直觉主义逻辑形式化【formalised 】,并在 1920 年代和 1930 年代发展了上述释义。 由 Kleene 在 1940 年代引入的可实现性【Realisability】基于类似的释义。

鉴于对证明的直觉解读,直觉自然演绎【intuitionistic natural deduction】和 lambda 演算【lambda calculus】应该如此紧密地对应,这似乎并不令人惊讶。但是直到霍华德才清楚地列出了对应关系,使得工作中的逻辑学家和计算机科学家将其投入使用。

霍华德的论文分为两半。 前半部分论文解释了两个很好理解的概念之间的对应关系,一方面是命题连接词【propositional connectives】 &、∨、⊃,另一方面是计算类型【computational types】 ×、+、→。后半部分论文扩展了这个类比,对逻辑中易于理解的概念,在与之对应的类型中提出了新概念。特别是,霍华德提出谓词量词【predicate quantifiers】 ∀ 和 ∃ 对应于我们现在称为依赖类型【dependent types】的新类型。

随着依赖类型【dependent types】的的引入,谓词逻辑【predicate logic】中的每一个证明【proof】都可以用一个合适的类型化 lambda 演算的项【a term of a suitable typed lambda calculus】来表示。 数学家和计算机科学家基于这个概念提出了许多系统,包括 de Bruijn 的 Automath、Martin-Lof 的类型论【type theory 】、Bates 和 Constable 的 PRL 和 nuPRL ,以及 Coquand 和 Huet 的构造演算【Calculus of Constructions】 ,它们发展成为 Coq 证明工具【Coq proof assistant】 .

应用:

  • ① CompCert,一种在 Coq 中验证的 C 编程语言的认证编译器;
  • ② 四色定理的计算机检查证明也在 Coq 中得到验证 
  • ③ Ensemble 分布式系统的一部分在 NuPRL 中得到验证。

de Bruijn 的作品独立于霍华德【Howard 】的作品,但 霍华德【Howard 】直接启发了 Martin Lof 和上面列出的所有其他作品。霍华德(理当如此!)为他的论文感到自豪,并将其列为他职业生涯中两项伟大成就之一。

直觉主义逻辑

在吉尔伯特和沙利文的《船夫》中,卡西尔达被告知,她在襁褓中就嫁给了巴达维亚国王的继承人,但由于一场误会,没有人知道马可或朱塞佩两个人中的哪一个是继承人。 她惊慌地哭道:“那你的意思是说我嫁给了两个船夫中的一个,但又说不出是哪一个?” 对此的回应是“”毫无疑问【Without any doubt of any kind whatever】”

逻辑有很多种,其中一种区别是古典逻辑【classical 】和直觉逻辑【intuitionistic】。 直觉主义者【Intuitionists 】担心一些逻辑学家对无限的本质所做的傲慢假设,坚持构造主义的真理概念。 特别是,他们坚持认为 A∨B 的证明必须表明 A 或 B 中的哪一个成立,因此他们将拒绝卡西尔达与马可或朱塞佩结婚的说法,直到两人中的一个被确定为她的丈夫。 也许吉尔伯特和沙利文预料到了直觉主义,因为他们故事的结果是,继承人是第三个人,路易斯,而卡西尔达恰好已经爱上了路易斯

直觉主义者【Intuitionists 】也拒绝承认排中律【excluded middle】,该律断言 A ∨ ¬A 对于每个 A 均成立,因为排中律没有给出关于 A 或 ¬A 中哪一个成立的线索。 海廷【Heyting 】形式化了希尔伯特【Heyting】古典逻辑【classical logic】的一个变体,它抓住了可证明性的直觉主义概念【intuitionistic notion】。 特别是排中律在希尔伯特【Heyting】的逻辑中是可证明的,但在海廷【Heyting 】的逻辑中却不能证明。 此外,如果将排中律作为公理添加到海廷【Heyting】的逻辑中,那么它就变得等价于希尔伯特【Heyting】的。 柯尔莫戈洛夫【Kolmogorov 】证明了这两种逻辑是密切相关的:他给出了一个双重否定的转化【double-negation translation】,当且仅当一个公式的转化【translation】在直觉逻辑中可证明时,那么该公式在经典逻辑中可证明。

命题作为类型【Propositions as Types】最初是为直觉逻辑制定的。 它是一个完美的匹配,因为在直觉主义的解释中,当一个人证明了 A 或者公式 B ,那么公式 A ∨ B 是可以被证明的,所以与析取【disjunction 】相对应的类型是一个不相交和【disjoint sum】。

6. Natural deduction

我们现在转向一个更正式的发展,展示一个自然演绎的片段和一个类型化 lambda 演算的片段,其风格明确了两者之间的联系。

我们从根岑【Gentzen 】定义的自然演绎的细节开始。 证明规则如图 1 所示。为了简化我们的讨论,我们只考虑自然演绎的两个连接词【connectives】。 我们将 A 和 B 写为代表任意公式的占位符。 合取【 conjunction 】写成 A & B,蕴涵【 implication】写成 A ⊃ B。

我们用树【tree】表示证明【proof】,其中树【tree】的每个节点【node 】都是证明规则【proof rule】的一个实例。 每个证明规则【proof rule】由两部分组成,一方面是由写在横线上方的零个或多个公式组成,称为前提【 premises】,另一方面是由写在横线下方的单个公式组成,称为结论【conclusion】。 对规则的解释是,当所有前提都成立时,则得出结论。

证明规则【proof rule】是成对出现的,每个连接词【connectives】都有自己的引入规则和【 introduce rule】消除规则【eliminate rule】,分别标记为 -I 和 -E 。当我们从上到下阅读规则时,引入和消去规则就像他们在纸上写的那样:第一个为连接词【connectives】引入了一个公式,该连接词【connectives】出现在结论中,但不在前提中;第二个则为连接词【connectives】消除了一个公式,该连接词【connectives】出现在前提中,但不出现在结论中。引入规则描述了我们所说的连接词在什么条件下成立——即如何定义连接词。 消除规则描述了当连接词成立时我们可能得出的结论——即如何使用连接词。

连词的引入规则 &-I 指出,如果公式 A 成立且公式 B 成立,则公式 A & B 也必须成立。 合取有两个消除规则。 第一个是 &-E1,说明如果公式 A & B 成立,那么公式 A 也必然成立。 第二个是 &-E2,说明如果公式 A & B 成立,那么公式 B 也必然成立。

蕴涵的导引入规则 ⊃-I 指出,如果从公式 A 成立的假设我们可以推导出公式 B ,那么我们可以得出结论,公式 A ⊃ B 成立并解除【discharge】假设。 为了表明 A 在 B 的证明中被用作假设 0 次、1 次或多次,我们将 A 写在方括号中,并通过省略号将其连接到 B。  蕴涵消除规则 ⊃-E 表明,如果公式A ⊃ B 成立,且公式 A 成立,那么我们可以得出公式 B 也成立; 如前所述,这条规则也被称为假言推理【modus ponens】

公式 (B & A) ⊃ (A & B). 的证明如图 2 所示。换句话说,如果 B 和 A 成立,则 A 和 B 成立。 这可能看起来如此明显以至于几乎不值得证明! 但是,公式 B ⊃ A 和 A ⊃ B 的含义不同,我们需要一些正式的方法来得出公式 B & A 和 A & B 具有相同含义的结论。 这就是我们的证明所显示的,令人欣慰的是,它可以由我们假定的规则构建。

证明如下。 根据 B & A,我们通过 &-E2 得出 A;根据 B & A ,我们还可以通过 &-E1 得出 B。 从 A 和 B,我们通过 &-I 得出 A & B。 也就是说,从假设 B & A(这里使用了两次)我们得出 A & B。我们解除该假设并通过 ⊃-I 得出 (B & A) ⊃ (A & B)。

有些证明是不必要的迂回【roundabout】。化简证明的规则见图 3 所示,这样一个证明的例子见图 4 。让我们首先关注这个例子。

图 4 的顶部显示了根据图 2 中的证明构建的更大的证明。更大的证明以两个公式 B 和 A 作为前提,并以公式 A 和 B 结束。然而,我们没有直接得出结论,而是以一种迂回的方式推导出结论,只是为了说明 ⊃-E 的一个实例,假言推理【modus ponens】。 证明解读如下,左边是前面给出的证明,得出 (B & A) ⊃ (A & B) 的结论; 在右边,从 B 和 A 我们通过 &-I 得出 B & A。结合以上所有,通过 ⊃-E 得出 A & B。

我们可以通过应用图 3 中的重写规则【 rewrite rules】来简化证明。这些重写规则【rewrite rules】指定了当引入规则后紧跟相应的消除规则时如何简化证明。 每个重写规则【 rewrite rules】展示了两个用箭头连接的证明,表明 redex (左边的证明)可能被重写或简化,以产生 reduct (右边的证明)。重写总是将一个有效的证明转换为另一个有效的证明。

对于 &,redex 由 A 的证明和 B 的证明组成,它们结合起来通过 &-I 导出 A & B,然后通过 &-E1 导出 A。  reduc 仅由 A 的证明组成,丢弃不需要的 B 证明。其实还有一个类似的规则(这里未显示)来对 &-I 后跟 &-E2 进行化简。

对于 ⊃,redex 由两部分组成,第一部分由一个 B 的证明组成,其中公式 B 是由公式 A 成立的假设推导出的,它通过 ⊃-I 导出 A ⊃ B,另一部分是由 A 的证明组成,两部分结合起来通过 ⊃-E 导出 B。 reduct 由 B 的相同证明组成,但现在推导出 B 的假设 A 的每次出现,都完全被给出 A 的证明所取代。 在 redex 中, 假设 A 可以在 B 证明中使用 0 次、1 次或多次,所以在 reduct 中,A 的证明可以在 B 的证明中被复制 0 次、1 次或多次。 由于这个原因,reduct 可能比 redex 大,但它会更简单,因为它通过 A ⊃ B 的子证明【subproof】消除了不必要的迂回。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值