逻辑等价、重言式、矛盾式与德摩根律
把真值表进一步抽象为逻辑等价、重言式、矛盾式和德摩根律,建立命题逻辑中的等价变换与表达式化简能力。
[!info] related notes
- 所属 MOC: logic-moc
- 相关概念:
- 易混淆概念:
- 相关资源:
逻辑等价、重言式、矛盾式与德摩根律
为什么这几个概念要一起学
真值表告诉我们每个复合命题在不同赋值下是真是假;逻辑等价、重言式和矛盾式则把这种逐行检查提升成可以反复复用的规则。
真值表:逐个状态计算
↓
逻辑等价:两个表达式在所有状态下结果相同
↓
等价律:以后可以直接替换,不必每次重新枚举
逻辑等价
两个命题公式 A 和 B 逻辑等价,记作:
A ≡ B
意思是:在所有可能的真值赋值下,A 与 B 的真值都相同。
等价不是说两个句子“意思差不多”,而是说它们的真值条件完全一致。
例如:
P → Q ≡ ¬P ∨ Q
因为两者只有在 P=true, Q=false 时为假,其他情况下都为真。
这条等价特别重要,因为它说明材料蕴涵可以改写成“不是 P,或者 Q”。
重言式与矛盾式
重言式 Tautology
无论原子命题怎样取值都为真的公式。
P ∨ ¬P
无论 P 真还是假,整个公式都为真。
矛盾式 Contradiction
无论怎样取值都为假的公式。
P ∧ ¬P
不可能同时满足。
偶真式 Contingency
有些赋值为真、有些为假的公式。
P ∧ Q
这才是普通现实命题最常见的情况。
为什么重言式能判断有效性
一个论证:
P1
P2
...
Pn
∴ C
有效,当且仅当下面这个条件式是重言式:
(P1 ∧ P2 ∧ ... ∧ Pn) → C
这把“论证有效”转换成了“有没有可能所有前提都真而结论假”。
德摩根律
命题逻辑中最实用的两条等价:
¬(P ∧ Q) ≡ ¬P ∨ ¬Q
¬(P ∨ Q) ≡ ¬P ∧ ¬Q
通俗说:否定一个整体时,否定往里推进,同时 AND / OR 互换。
自然语言例子
原句:
不是“服务 A 和服务 B 都健康”。
等价于:
服务 A 不健康,或者服务 B 不健康,至少一个成立。
即:
¬(A ∧ B) ≡ ¬A ∨ ¬B
另一边:
既不是 A 故障,也不是 B 故障。
等价于:
A 不故障并且 B 不故障。
¬(A ∨ B) ≡ ¬A ∧ ¬B
与编程的连接
例如:
!(isAdmin || isOwner)
可以按德摩根律改写为:
!isAdmin && !isOwner
两者布尔结果等价。
但工程上是否应该改写,还要考虑可读性、副作用和语言求值语义。纯逻辑等价只讨论真假条件,不自动处理函数调用、副作用和短路执行成本。
其他高频等价律
双重否定
¬¬P ≡ P
交换律
P ∧ Q ≡ Q ∧ P
P ∨ Q ≡ Q ∨ P
结合律
(P ∧ Q) ∧ R ≡ P ∧ (Q ∧ R)
(P ∨ Q) ∨ R ≡ P ∨ (Q ∨ R)
分配律
P ∧ (Q ∨ R) ≡ (P ∧ Q) ∨ (P ∧ R)
P ∨ (Q ∧ R) ≡ (P ∨ Q) ∧ (P ∨ R)
条件式消去
P → Q ≡ ¬P ∨ Q
双条件展开
P ↔ Q ≡ (P → Q) ∧ (Q → P)
也等价于:
(P ∧ Q) ∨ (¬P ∧ ¬Q)
也就是两边真假相同。
逆否等价
P → Q ≡ ¬Q → ¬P
这一条直接连接到否定后件 Modus Tollens。
等价不等于因果
P → Q ≡ ¬P ∨ Q 是真值条件上的等价,不是在说:
“不是 P”造成了 Q。
逻辑联结词描述的是真值结构,不能自动解释现实世界中的因果机制。
等价不等于自然语言完全可互换
两个公式逻辑等价,并不代表在所有对话场景里语用效果相同。
例如:
如果你提交表单,那么系统会保存。
和:
你不提交表单,或者系统会保存。
在经典命题逻辑里可写成等价形式,但第二句话在自然语言中很不自然,而且可能给人不同暗示。
所以形式化的目标是分析真值条件,不是抹平语言中的语气、时间、因果和承诺。
快速判断方法
要证明两个命题逻辑等价,可以:
- 画完整真值表,检查两列是否逐行相同;
- 用已知等价律逐步变换;
- 检查
A ↔ B是否为重言式。
快速自测
判断:
¬(P → Q)
等价于什么?
先替换:
P → Q ≡ ¬P ∨ Q
所以:
¬(¬P ∨ Q)
≡ P ∧ ¬Q
这非常符合条件句的直觉:要否定“如果 P,那么 Q”,你必须找到一个 P 真的发生了,但 Q 没发生 的反例。
一句记忆
真值表告诉你每一格发生什么;逻辑等价告诉你哪些表达式其实是同一张真值地图。