1. 为什么突然想聊命题、谓词和公理化
先说个背景。我最近在补数学基础,从高中毕业到现在十几年,数学基本还给了老师。真正让我下定决心重新啃这些内容的,不是考试,而是工作中遇到的几个需求:写复杂业务规则时需要精确表达"同一类对象都要满足某个条件"和"至少存在一个对象满足某个条件"的区别;做代码评审时发现同事用自然语言描述需求,一百个人能理解出一百个版本。这些东西归根结底,都是逻辑表达不够精确的问题。
命题、谓词、公理化,这三个词听起来像是哲学系或者数学系的专业课程,但实际上它们是"精确表达"的三层基础工具。命题解决"这句话是真是假"的问题,谓词解决"这句话里带着变量,怎么判断真假"的问题,公理化解决"怎么从最少的起点推出整个体系"的问题。如果你写过 SQL 的 WHERE 子句、写过类型系统里的泛型约束、或者用断言库写过测试,你其实已经在用这些思想的雏形了。
这篇文章适合三类人:一是准备考研或自学离散数学的学生,二是想系统补逻辑基础的开发者,三是被自然语言表达坑过、想学怎么把话说严谨的任何人。我会按实际学习顺序来写,把我踩过的坑和总结出的框架一并放进来,照着走一遍,至少能把"逻辑三件套"的骨架立起来。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 命题:逻辑推理的最小积木
2.1 命题到底是个什么东西
命题的定义很简单:能判断真假(真或假,但不能既真又假)的陈述句。注意三个关键词:陈述句、能判断、唯一真假。
- "今天下雨了"——是命题,因为可以判断真假
- "快点过来"——不是命题,祈使句
- "这个苹果好吃吗?"——不是命题,疑问句
- "x 大于 5"——不是命题,因为 x 不确定,无法判断真假(这正是后面谓词要解决的)"
- "这句话是假的"——这不是命题,因为它会导致悖论(自指矛盾)
我当年第一次学的时候,觉得这不就是语文课的"陈述句"吗?但真正搞懂之后发现,这个定义的威力在于"可判定性"。它逼着你在说任何话之前先问一句:这句话到底能不能判断真假?很多争论的根源,其实是大家在讨论一个根本没法判断真假的句子。
2.2 五个联结词:逻辑世界的"运算符"
命题不是孤立存在的,我们需要把简单命题组合成复杂命题,这就引入了联结词,相当于编程里的运算符。标准的有五个:
| 联结词 | 符号 | 含义 | 编程类比 | 口诀 |
|---|---|---|---|---|
| 否定 | ¬ | 非 | ! | 真变假,假变真 |
| 合取 | ∧ | 且 | && | 一假则假 |
| 析取 | ∨ | 或 | || | 一真则真 |
| 蕴含 | → | 如果...那么... | if 条件则结果 | 只有"前真后假"才是假 |
| 等价 | ↔ | 当且仅当 | === | 同真同假 |
这五个里面,最容易出问题的是蕴含(→)。生活中我们说"如果你考上大学,我就送你一台电脑",默认是"考上就送,没考上就不送",这是双向的。但逻辑里的蕴含是单向的,它只承诺"前件为真时后件必须为真",前件为假时,整个蕴含命题不管后件真假都算真。这就是著名的"空真"(vacuous truth)。
我第一次接触空真的时候特别别扭,觉得这是在耍赖。后来想通了:逻辑只惩罚"承诺被打破"的情况。如果前件压根没发生,承诺就没被打破,当然不算假。这在程序里很常见:if (x > 0) { return "positive"; },当 x ≤ 0 时函数不返回 "positive",你总不能说这个 if 语句是错的吧?
2.3 真值表:把所有情况摆上桌
判断复杂命题的真假,最笨但最可靠的方法就是列真值表,把所有真假组合摆出来。以蕴含为例:
| p | q | p → q |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 假 | 假 |
| 假 | 真 | 真 |
| 假 | 假 | 真 |
我建议初学者把五个联结词的真值表都手写一遍,不要只看书。手写的过程会强迫你思考每一种组合。比如 p → q 和 ¬p ∨ q 的真值表完全一样,这说明两者逻辑等价。这个等价关系在后面的推理规则中特别常用,很多证明题里,把蕴含拆成"非或"之后,整个证明立刻顺了。
另一个常见考点是判断两个命题是否等价、是否矛盾、是否可满足。实操方法就是列真值表对比列,或者化简成范式。我自己的经验是:真值表适合 2 到 3 个变量的情况,一旦变量超过 4 个,行数就爆炸了(2 的 n 次方),这时候需要找更聪明的方法,也就是谓词和推理规则登场的时候。
2.4 命题逻辑的"计算":等值演算
命题逻辑除了列真值表,还有一套类似代数运算的"等值演算"规则。核心的套路有这么几条:
- 双重否定消去:¬¬p ⟺ p
- 德摩根律:¬(p ∧ q) ⟺ ¬p ∨ ¬q,¬(p ∨ q) ⟺ ¬p ∧ ¬q
- 蕴含等值式:p → q ⟺ ¬p ∨ q
- 分配律:p ∧ (q ∨ r) ⟺ (p ∧ q) ∨ (p ∧ r)
用这些规则,可以把任意复杂命题化简。比如判断 `(p → q) ∧ p →
