在逻辑和数学里,命题演算(或称句子演算)是一个形式系统,有着可以由以逻辑运算符结合原子命题来构成代表“命题”的公式,以及允许某些公式建构成“定理”的一套形式“证明规则”。
术语
一般来讲,运算是一个形式系统,包括一套语法表示式、这些表示式可区分的子集(公理)和一套定义了特定的二元关系,可解译为表示式空间上的逻辑等价的形式规则。
若形式系统被指为是一个逻辑系统,其表示式会被解释成数学陈述,且其规则,被称之为“推理规则”,则一般会被指是保真的。在此设定下,规则(可能也包括公理)可以被用来从给定为正确陈述的公式中推导出表示正确陈述的公式来。
公理的集合可能为空集、非空有限集、可数无限集或由公理模式所给定。形式文法递回地定义了语言的表示式和合式公式。之外,一个语义可以由定义真值和赋值(或解释)来给定。
命题运算的语言包括:(1)一套原始符号,被称之为“原子公式”、“占位符”、“命题字母”或“命题变量”;(2)一套运算符号,被称之为“逻辑运算符”。一个“合式公式”是任一原子公式,或任一以运算符号依文法规则由原子公式建立起的公式。
在下文中我们描述一种标准命题演算。很多不同的公式系统存在,它们都或多或少等价但在下列方面不同:(1)它们的语言(就是说哪些操作符和变量是语言的一部分); (2) 它们有哪些(如果有的话)公理; (3)采用了哪些推理规则。
命题演算的形式描述
命题演算是一个形式系统 ,它的公式按如下方式构造:
- 是有限多个被称之为“命题符号”或“命题变量”之元素所组成的集合。语法上来说,这些是形式语言 最基本的元素,亦被称之为“原子公式”或“终端元素”。在后面的例子中, 内的元素一般会被写为字母 p 、 q 、 r 之类的形式。
- 在此一划分中, 是指 元数为 的算子符号所构成的集合。
- 在更熟知的命题演算中, 一般被划分如下:
- 常数 逻辑值则常被选择视为一种零元算子,即:
- 有些作者用 ~ 来替代 ¬ ,且用 & 或 来取替 。逻辑值所构成的集合也有许多不同的符号表示,如 {假,真} 、 {F,T} 、 {0,1} 和 { , } ,这些都常见于各个文献之中。
- 依据所使用的精确形式文法或文法形式化,语法辅助设施如左括号 "(" 和右括号 ")",若要完成公式的构造,可能会是必须的。
的语言,亦称之为“公式”或“合式公式”的集合,可由如下规则被归纳或递回地定义:
- 基本元素: 内的任何元素都是 的公式。
- 步骤 (a):如果 p 是公式,则 ¬p 也会是公式。
- 步骤 (b):如果 p 和 q 是公式,则 ( ) 、 ( ) 、 () 和 () 也都会是公式。
- 封闭性:其他都不会是 的公式。
重复应用这三个规则允许建构出复杂的公式来。例如:
- 依规则 1,p 是公式。
- 依规则 2,¬p 是公式。
- 依规则 1,q 是公式。
- 依规则 3,(¬p ∨ q) 是公式。
- 是有限多个当取得逻辑应用时被称之为“推理规则”之“转换规则”所构成的集合。
- 是有限多个当得到逻辑解释时被称之为“公理”之“起始点”所构成的集合。
简单的公理系统
设 ,这里的 定义如下:
- 是个大到有足够多可供给定的讨论所需之符号所构成的有限集合,如:
合取、析取和蕴涵(∧、∨ 和 →)这三个运算符,可以将其中一个拿来当做基本的,而另两个则以其和否定(¬) 来定义。实际上,所有的逻辑运算符都可以用自足算子的方式来定义。而双条件(↔)当然可由合取和蕰涵来定义,亦即 a ↔ b 可被定义为 (a → b) ∧ (b → a) 。
接受否定和蕴涵作为命题演算的两个基本运算等价于把 omega 集 划分为如下: 采用否定和蕰涵做为命题演算的两个基本运算,相等于将 划分如下:
由扬·武卡谢维奇所发现的一个公理系统可以依如下公理模式公式化此语言的命题演算。
其推理规则为肯定前件(即可由 p 和 (p → q) 导出 q )。而 a ∨ b 和 a ∧ b 则是分别被定义为 ¬a → b 和 ¬(a → ¬b) 。
自然演绎系统
设 ,这里的 定义如下:
- 是个大到有足够多可供给定的讨论所需之符号所构成的有限集合,如:
-
-
- 。
-
- 划分为如下:
-
-
- 。
-
-
-
- 。
-
在此命题演算的例子中,转换规则被解释为所谓的“自然演绎系统”下之推理规则。这里表述的特定系统没有起始点,这意味着它对逻辑应用的解译是从空公理集合中推导出其定理的。
- 起始点的集合是空的,亦即 。
- 转换规则的集合 描述如下:
此命题演算有十个推理规则。这些规则允许我们从给定的一组假定为真的公式中推导出其他为真的公式。 前九个简单的陈述我们可以从其他合式公式推论出特定的合式公式。但是最后一个规则使用了假言(hypothetical)推理,这意味着在规则的前提中我们可以临时的假定一个(未证明的)假设作为推导出的公式集合的一部分,来查看我们是否能推导出一个特定的其他公式。因为前九个规则不是这样而通常被描述为“非假言”规则,而最后一个则被称为“假言”规则。
-
反证证明(否定介入)
- 从 φ → ¬ ψ 和 φ → ψ 中可推出 ¬ φ 。 双重否定除去
- 从 ¬ ¬ φ 中可推出 φ。 合取介入
- 从 φ 和 ψ 中可推出 ( φ ∧ ψ ) 。 合取除去
- 从 ( φ ∧ ψ ) 中可推出 φ 和 ψ 。 析取介入
- 从 φ 中可推出 (φ ∨ ψ) 和 (ψ ∨ φ) 。 析取除去
- 从 ( φ ∨ ψ ) 、 ( φ → χ ) 和 ( ψ → χ ) 可推出 χ 。 双条件介入
- 从 ( φ → ψ ) 和 ( ψ → φ ) 中可推出 ( φ ↔ ψ ) 。 双条件除去
- 从 ( φ ↔ ψ ) 中可推出 ( φ → ψ ) 和 ( ψ → φ ) 。 肯定前件(条件除去)
- 从 φ 和 ( φ → ψ ) 中可推出 ψ。 条件证明(条件介入)
- 若假定 φ 为真可证明出 ψ ,可推出 ( φ → ψ ) 。
证明的例子
使用我们的演算的推导将用编号后的行的列表,在每行之上有一个单一的 wff 和一个理由(justification)的形式展示出来。采用什么前提或应用了什么规则。结论将在最后一行。推导将被看作完备的,条件是所有行都是通过正确的应用一个规则而从前面的行得出的。
下面是(语法上的)证明的一个例子:
要证明:
证明:
-
编号 wff 理由 1 A 前提 2 A∨A 析取介入自 (1) 3 (A∨A)∧A 合取介入自 (1) 和 (2) 4 A 合取除去自 (3) 5 A A 总结 (1) 到 (4) 6 A→A 条件证明自 (5)
解释 为“假定 A,推导出 A”。读 为“不假定任何东西,推导出 A 蕴涵 A”,或者“A 蕴涵 A 是重言式”,或者“A 蕴涵 A 是永真的”。
规则的可靠性和完备性
这组规则的关键特性是它们是可靠的和完备的。非形式的说,这意味着规则是正确的并且不再需要其他规则。这些要求可以如下这样正式的提出。
我们定义真值指派为把命题变量映射到真或假的函数。非形式的,这种真值指派可以被理解为对事件的可能状态(或可能性世界)的描述,在这里特定的陈述是真而其他为假。公式的语义因而可以被形式化,通过对它们把那些"事件状态"认定为真的定义。
我们通过如下规则定义这种真值 A 在什么时候满足特定 wff:
- A 满足命题变量 P 当且仅当 A(P) = 真
- A 满足 ¬ φ 当且仅当 A 不满足 φ
- A 满足 (φ ∧ ψ) 当且仅当 A 满足 φ 与 ψ 二者
- A 满足 (φ ∨ ψ) 当且仅当 A 满足 φ 和 ψ 中至少一个
- A 满足 (φ → ψ) 当且仅当没有 A 满足 φ 但不满足 ψ 的事例
- A 满足 (φ ↔ ψ) 当且仅当 A 满足 φ 与 ψ 二者,或则不满足它们中的任何一个
通过这个定义,我们现在可以形式化公式 φ 被特定公式集合 S 蕴涵的意义。非形式的,就是在使给定公式集合 S 成立的所有可能情况下公式 φ 也成立。这导引出了下面的形式化定义: 我们说 wff 的集合 S 语义蕴涵(蕴涵:entail 或 imply)特定的 wff φ,条件是满足在 S 中的公式的所有真值指派也满足 φ。
最后我们定义语法蕴涵,φ 被 S 语法蕴涵,当且仅当我们可以在有限步骤内使用我们提出的上述推理规则推导出它。这允许我们精确的公式化推理规则的可靠性和完备性的意义:
-
可靠性
- 如果 wff 集合 S 语法蕴涵 wff φ,则 S 语义蕴涵 φ 完备性
- 如果 wff 集合 S 语义蕴涵 wff φ,则 S 语法蕴涵 φ
对上述规则集合这些都成立。
可靠性证明的梗概
(对于多数逻辑系统,这是相当“简单的”证明方向)
符号约定: 设 G 是涉及语句集合的变量。设 A、B 和 C 是涉及句子的变量。我们把“G 语法蕴涵 A”写成“G 证明 A”。我们把“G 语义蕴涵 A”写成“G 蕴涵 A”。
我们要展示: (A)(G)(如果 G 证明 A,则 G 蕴涵 A)
我们注意到“G 证明 A”有一个归纳定义,这给予我们直接的办法来证实(demonstrate)“如果 G 证明 A,则 ……”形式的断言。所以我们的证明是用归纳法进行的。
- I. 基础。展示: 如果 A 是 G 的成员则 G 蕴涵 A
- [II. 基础。展示: 如果 A 是公理,则 G 蕴涵 A
- III. 归纳步骤: (a) 假定对于任意的 G 和 A,如果 G 证明 A 则 G 蕴涵 A。(如果需要的话,对 B、C 等做同样的假定)
-
- (b) 对于针对 A 的推论的规则的,导出一个新的句子 B 的每个可能的应用,展示 G 蕴涵 B。
(N.B. 对于上述演算基础步骤 II 可以省略,它是自然演绎系统而没有公理。基本上,它涉及展示每个公理都是(语义上)逻辑真理。)
基础步骤证实了对于任何 G 来自 G 的最简单的可证明的语句都被 G 所蕴涵。(这是简单的,因为集合蕴涵它的任何一个成员是语义事实,这是平凡的(trivial))。归纳步骤将有系统的覆盖所有的进一步的可证明的句子--通过考虑我们能够使用推理规则达成逻辑结论的每种情况--并展示如果一个新句子是可证明的,它也是在逻辑上被蕴涵的。(例如,我们可能有一个告诉我们从 A 可以推导出“A 或 B”。在 III.(a) 中我们假定如果 A 是可证明的则是被蕴涵的。我们也知道如果 A 是可证明的,则“A 或 B”是可证明的。我们必须展示接着“A 或 B”也是被蕴涵的。我们求助于语义定义和我们所做的假定来完成。我们假定了 A 从 G 是可证明出来的。所以它也被 G 所蕴涵。所以使 G 全部为真的任何语义求值也使 A 为真。此外通过“或”的语义定义,使 A 为真的任何求值都使“A 或 B”为真。所以使 G 的全部为真的任何求值都使“A 或 B”为真。所以“A 或 B”被蕴涵了。)一般的,归纳步骤将由有一定长度的,却是推论的所有规则的简单的逐个例的分析组成的,它展示每个“保持的”语义蕴涵。
通过可证明性的定义,除了 G 的成员、公理、或从规则得出的句子之外没有是可证明的;所以如果所有这些都是语义上被蕴涵的,则演绎演算是可靠的。
完备性证明的梗概
(这通常是非常困难的证明方向。)
我们接受同上面一样的符号约定。
我们要展示: 如果 G 蕴涵 A,则 G 证明 A。我们通过反证法来进行: 我们转而展示如果 G 不证明 A,则 G 不蕴涵 A。
- I. G 不证明 A。(假定)
- II. 如果 G 不证明 A,则我们可以构造一个(有限的)"最大化的集合" G*,它是 G 的超集并且不证明 A。
- (a)在这个语言的所有句子上加置一个“次序”。(比如,字母表次序),并把它们编号为 E1, E2, . . .
- (b)归纳的定义集合(G0, G1 . . . )的一个序列(series) Gn 为如下 (i)G0=G。 (ii) 如果 {Gk, E(k+1)} 证明 A,则 G(k+1)=Gk。 (iii) 如果 {Gk, E(k+1)} 不证明 A,则 G(k+1)={Gk, E(k+1)}
- (c)定义 G* 为所有 Gn 的并集。(就是说,G* 在任何 Gn 中的所有句子的集合)。
- (d) 可以容易的展示 (i) G* 包含(是其超集) G (通过 (b.i));(ii) G* 不证明 A (因为如果它证明 A 则某些句子被增加到某个 Gn 上而导致它证明了 A; 但是这被定义所排除);和 (iii) G* 是(关于 A) "最大化的集合": 如果任何更多的句子不管怎样的被增加到 G*,它就会证明 A。(因为如果有可能增加任何更多的句子,再次根据定义,在构造 Gn 期间被遇到的时候它们就应当已经被增加进去了。)
- III. 如果 G* 是(关于 A)的最大化集合,则它是"类真理的"。这意味着它包含句子 A,只在它不包含非-A 的句子的条件下; 如果它包含 A 并且包含“如果 A 则 B”,则它也包含 B;以此类推。
- IV. 如果 G* 是类真理的,则有这个语言的“G*-规范”求值: 它使在 G* 中每个句子为真而在 G* 之外的所有句子为假,而仍然遵守在这个语言的语义合成(composition)的法则。
- V. G*-规范求值将使我们最初的集合 G 全部为真,而使 A 为假。
- VI. 如果有在其上 G 是真而 A 是假的求值,则 G 不(语义上)蕴涵 A。Q.E.D.
公理化演算
下面定义的命题演算通过公理的方式定义了多数逻辑算子的语法并且它只使用一个推理规则。它也叫做标准命题演算。
公理
设 φ、χ 和 ψ 表示合式公式。(wff 自身将不包含任何希腊字母,而只包含大写罗马字母、连结算子和圆括号)。公理有
- THEN-1: φ → (χ → φ)
- THEN-2: (φ → (χ → ψ)) → ((φ → χ) → (φ → ψ))
- AND-1: φ ∧ χ → φ
- AND-2: φ ∧ χ → χ
- AND-3: φ → (χ → (φ ∧ χ))
- OR-1: φ → φ ∨ χ
- OR-2: χ → φ ∨ χ
- OR-3: (φ → ψ) → ((χ → ψ) → (φ ∨ χ → ψ))
- NOT-1: (φ → χ) → ((φ → ¬ χ) → ¬ φ)
- NOT-2: φ → (¬ φ → χ)
- NOT-3: φ ∨ ¬ φ
公理 THEN-2 可以被看作是“蕴涵关于蕴涵的分配律”。公理 AND-1 和 AND-2 对应于“合取除去”。在 AND-1 和 AND-2 之间的关系反映了合取算子的交换律。公理 AND-3 对应于“合取介入”。公理 OR-1 和 OR-2 对应于“析取介入”。在 OR-1 和 OR-2 之间的关系反映了析取算子的交换律。公理 NOT-1 对应于反证法。公理 NOT-2 说明了“从矛盾中可以推导出任何东西”。公理 NOT-3 叫做排中律(拉丁语 tertium non datur: “排除第三者”)并反映了命题公式的语义求值: 公式可以有的真值要么是真要么是假。至少在经典逻辑中,没有第三个真值。直觉逻辑不接受公理 NOT-3。
推理规则
推理规则是肯定前件:
- .
如果还使用双箭头的等价算子的话,则要增加如下"自然"推理规则:
- IFF-1:
- IFF-2:
元推理规则
设示范被表示为相继式,假设在十字转门(turnstile)的左侧而结论在十字转门的右侧。则演绎定理可以被陈述如下:
-
如果相继式
-
已经被证明了,则也有可能证明相继式
- 。
这个演绎定理(DT)自身没有公式化为命题演算: 它不命题演算的定理,而是关于命题演算的一个定理。在这个意义上,它是元定理,相当于关于命题演算可靠性和完备性的定理。
在另一方面,DT 对与简化语法上的证明过程是如此的有用以至于它看作和用做推理规则,同肯定前件一起使用。在这个意义上,DT 对应于自然条件证明推理规则,它是在本文中提出的第一个版本的命题演算的一部分。
DT 的逆定理也是有效的:
-
如果相继式
-
已经被证明了,则也有可能证明相继式
实际上,DT 的逆定理的有效性相对于 DT 而言是平凡的:
-
如果
-
则
- 1:
- 2:
-
并且可以演绎自 (1) 和 (2)
- 3:
- 通过肯定前件的方式,Q.E.D.
DT 的逆命题有着强有力的蕴涵: 它可以用来把公理转换成推理规则。例如,公理 AND-1,
可以通过演绎定理的逆定理的方式被转换成推理规则
这是合取除去,是前面给出的自然演绎命题演算中使用的十个推理规则中的一个。
证明的例子
下面是(语法上)证明的一个例子,只涉及到公理 THEN-1 和 THEN-2:
要证明: A → A (蕴涵的自反性)。
证明:
-
1. (A → ((B → A) → A)) → ((A → (B → A)) → (A → A))
- 公理 THEN-2 通过 φ = A, χ = B → A, ψ = A
-
2. A → ((B → A) → A)
- 公理 THEN-1 通过 φ = A, χ = B → A
-
3. (A → (B → A)) → (A → A)
- 得自 (1) 和 (2) 通过肯定前件。
-
4. A → (B → A)
- 公理 THEN-1 通过 φ = A, χ = B
-
5. A → A
- 得自 (3) 和 (4) 通过肯定前件。
完备性证明的梗概
如果公式是重言式,则有展示对每个求值的这个公式生成的值都是真的一个真值表。考虑这样一个求值。通过在子公式长度上的数学归纳法,展示从在子公式中的每个命题变量(适合这个求值)的真或假推出子公式的真或假。接着使用“(P 为真 → S) → ((P 为假 → S) → S)”一次两行的合并真值表的行到一起。持续重复这个过程直到对命题变量的所有依赖都除去了。结果是我们证明了这个重言式。因为所有重言式都是可证明的,逻辑是完备的。
等价于等式逻辑
前面的公理化命题演算是希尔伯特风格演绎系统的一个例子。在这种命题系统中公理是用逻辑连结词建造的项而唯一的推理规则是肯定前件。等式逻辑在高等学校的抽象代数教学中被作为正式的标准,它是不同于希尔伯特系统的一类不同的演算。它的定理是等式而它的推理规则表达相等性质,也就是在容许代换项上的全等(congruence)。
上述经典命题演算等价于布尔代数,而直觉命题演算等价于海廷代数。等价性是通过在两个方向上转换各自系统的定理来证明的。经典命题演算或直觉命题演算的定理 Φ 被分别转换为布尔代数或 Heyting 代数的等式 Φ = 1。反过来布尔代数或 Heyting 代数的定理 x = y 被分别转换为定理经典名义演算或直觉命题演算的定理 (x → y) ∧ (y → x),它的标准简写是 x ≡ y。在布尔代数的情况下, x = y 还可以被转换为 (x∧y) ∨ (¬x∧¬y),但在直觉的情况下中不能这么转换。
在布尔代数和 Heyting 代数中,可以使用不等式 x ≤ y 代替等式。等式 x = y 可以被表达为一对不等式 x ≤ y 且 y ≤ x。反过来不等式 x ≤ y 可被表达为等式 x∧y = x 或 x∨y = y。不等式的重要性在于它对应于希尔伯特系统的演绎或蕴涵符号 。蕴涵
被转换为代数框架的不等式
反过来代数不等式 x ≤ y 被转换为蕴涵
在实质条件(implication) x → y 和不等式或者蕴涵(entailment) x ≤ y 或 之间的区别在于前者是内在于逻辑的而后者是外在的。在两个项之间内在的实质条件是同类的另一个项。在两个项之间的外在的蕴涵表达了在逻辑语言之外的元真理,并被认为是元语言的一部分。即使所研究的逻辑是直觉的,蕴涵都通常经典的理解为二值的: 要么左侧蕴涵或小于等于右侧,要么不蕴涵之。
同代数逻辑之间相互的类似但更加复杂的相互转换,对于自然演绎系统和相继式演算也是可能的。后者的转换可以被释义为二值的,但是更有洞察力的释义是作为集合,它的元素可以被理解为由范畴的态射组成的抽象证明。在这种释义下相继式演算的切规则对应于范畴的复合。
其他逻辑演算
命题演算大概是在所有当前使用的逻辑演算中最简单的一种。(亚里士多德的“三段论”演算,在现代逻辑中在很大程度上被替代了,它与命题逻辑相比在某些方面更简单--但在其他方面更加复杂)。它可以按很多方式来扩展。
最直接的方式是开发一个更加复杂的逻辑演算,介入对所用于的句子的更精细的细节敏感的规则。在命题逻辑中的原子句子被分解成项、变量、谓词和量词的时候,它们就生成了一阶逻辑,或者叫做一阶谓词逻辑,它保持命题逻辑的所有规则并增加了一些新规则。(例如,从“所有的狗都是动物”我们可以推出“如果 Rover 是狗,则 Rover 是动物”)。
通过一阶逻辑的工具,有可能公式化一些理论,要么带有显式的公理要么通过推理规则,而把它们自身当作逻辑演算。算术是其中最周知的理论;其他的还包括集合论和 mereology。
模态逻辑也提供了一种推理的变体,它不能在命题演算中捕获。例如,从“必然性的 p”我们可以推出 p。从 p 我们可以推出“可能性的 p”。
多值逻辑是允许句子有除了“真”和“假”之外的值的逻辑。(例如,“都不”和“都是”是标准的“额外值”;“连续统逻辑”允许每个句子有任何的在“真”和“假”之间的表示“真实程度”的无限个值)。这些逻辑经常要求与命题逻辑非常不同的运算设备。