📑 本页目录(点开跳转)
03 · 命题逻辑
⏱ 27 分钟 | ⭐ 最小的形式化语言:只认整句话的真假,不认句子里面有什么
🎯 一句话
把一句话整个塞进一个字母,只保留它的真假,再用五个连接词把这些字母拼起来——这就是命题逻辑的全部。
它简单到近乎简陋,但它有一条别的逻辑都比不了的好处:任何公式的真假,都能在有限步内机械地算出来。
🧱 一、原子命题:能塞进一个字母的东西
命题(proposition)是一个陈述句,它必须有明确的真假。
| 是命题 | 不是命题 |
|---|---|
| 「天空是蓝的」 | 「今天天气怎么样?」(疑问句,没有真假) |
| 「苏格拉底是秃头」 | 「把门关上。」(祈使句) |
| 「这辆车是红的」 | 「这段文字挺好的」(含糊——好到什么程度算好?) |
写公式时我们用单个大写字母代替整句话,这叫缩写方案(scheme of abbreviation):
P:苏格拉底是秃头 Q:讲座很无聊 T:教材读得下去
⚠️ 注意代价:P 里面的「苏格拉底」和「秃头」已经没了。命题逻辑看不见句子内部的结构,
所以它推不出「所有人都会死 + 苏格拉底是人 ⟹ 苏格拉底会死」——那要等第 6 章。
🔗 二、五个连接词
| 符号 | 名字 | 写法 | 读作 |
|---|---|---|---|
| ¬ | 否定 | ¬P | 非 P |
| ∧ | 合取 | P ∧ Q | P 且 Q |
| ∨ | 析取 | P ∨ Q | P 或 Q |
| → | 蕴含 | P → Q | 如果 P,那么 Q |
| ↔ | 双蕴含 | P ↔ Q | P 当且仅当 Q |
⭐ ∨ 是可兼或:P ∨ Q 在「两个都真」时也为真。上一章那个「汤或沙拉」的歧义,在这里被强行钉死成可兼或——想表达排斥或,你得自己写 (P ∨ Q) ∧ ¬(P ∧ Q)。
⚠️ 蕴含是最反直觉的那个
P → Q 只在一种情况下为假:P 真而 Q 假。也就是说:
只要 P 是假的,
P → Q就自动为真,不管 Q 是什么。
「如果我是外星人,那么我会飞」——这句话是真的,因为我不是外星人。这叫空真(vacuously true)。
⭐ 为什么要这么定义:P → Q 表达的是「承诺」——「P 成立时我保证 Q 成立」。P 根本没发生,承诺就没被违反,所以不算撒谎。⚠️ 它不表达因果关系,P → Q 里 P 和 Q 可以毫无关系。
📐 三、语法:公式是递归造出来的
哪些字符串算合法公式?用 BNF 文法一次说清:
句子 ::= 原子句 | 复合句
原子句 ::= True | False | P | Q | R | ...
复合句 ::= ( 句子 )
| 句子 连接词 句子
| ¬ 句子
连接词 ::= ∧ | ∨ | → | ↔
⭐ 注意它是递归的:「句子」的定义里又出现了「句子」。所以公式可以任意深地套下去, 而判断一个字符串是不是公式,是纯机械的——按规则拆,能拆干净就是。
| 是公式 | 不是公式 | 为什么不是 |
|---|---|---|
A |
A + B |
+ 不是连接词 |
¬A |
A ¬ B |
¬ 是一元的,只能放在前面 |
¬A ∧ (B → C) |
∧ A B |
连接词必须在两个句子中间 |
(¬A ∨ B ∨ C) ∧ (B → C ∧ D) |
⭐ 公式只是符号。 到这一步为止,
¬A ∧ (B → C)什么意思都没有—— 语法只管形状,意思要等下一节的语义。
🌍 四、语义:模型与真值表
模型 = 一次真值指派
模型(model):给每个命题符号指定一个真值(真 / 假)。也叫世界(world)。
有 2 个符号 P、Q,就有 4 个模型(TT、TF、FT、FF);有 n 个符号,就有 2ⁿ 个模型。
连接词的意思,就是这张真值表
| P | Q | ¬P | P ∧ Q | P ∨ Q | P → Q | P ↔ Q |
|---|---|---|---|---|---|---|
| T | T | F | T | T | T | T |
| T | F | F | F | T | F | F |
| F | T | T | F | T | T | F |
| F | F | T | F | F | T | T |
⭐ 有了这张表,任何复杂公式的真值都能算——从最里层往外一层层填。
🖐️ 手算一张:验证一个恒真公式
算 (R ∧ S) → (¬R ∨ S)。加中间列,一列一列填:
| R | S | ¬R | R ∧ S | ¬R ∨ S | (R ∧ S) → (¬R ∨ S) |
|---|---|---|---|---|---|
| T | T | F | T | T | T |
| T | F | F | F | F | T |
| F | T | T | F | T | T |
| F | F | T | F | T | T |
⭐ 最后一列全是 T —— 这个公式在所有 4 个模型下都为真。
💡 手算技巧:不要试图一口气算最外层。先把每个子公式各占一列, 从最内层往外填,每一列只查一次上面那张真值表。这样 4 行 6 列的表,两分钟就填完,而且不会错。
🔀 五、⭐ 一句话,两个公式:歧义在这里被抓现行
这是本章最重要的例子。上一章说自然语言有歧义,现在我们把它抓出来量一量。
P:学生来上 COMP4418 的课 Q:学生通过 COMP4418 考试
句子:「学生不来上课就能通过 COMP4418 考试,这是不成立的。」
这句话有两种读法,取决于「这是不成立的」罩住了哪一段:
| 读法 | 括号加在哪 | 公式 |
|---|---|---|
| A | (学生不能通过考试)如果(他们不来上课) | ¬P → ¬Q |
| B | 不成立:(学生不来上课就能通过考试) | ¬(¬P → Q) |
它们是同一个公式吗?把真值表拉出来看:
| P | Q | ¬P | ¬Q | A:¬P → ¬Q | ¬P → Q | B:¬(¬P → Q) |
|---|---|---|---|---|---|---|
| T | T | F | F | T | T | F |
| T | F | F | T | T | T | F |
| F | T | T | F | F | T | F |
| F | F | T | T | T | F | T |
⭐ 4 行里有 2 行不同(第 1、2 行) —— 两种读法是两个不同的公式。
⭐⭐ 更值得注意的是:B 为真的那一行(FF),A 也为真;反过来不成立。 也就是说 B 比 A 严格更强——⭐ 这个「谁比谁强」的关系,下一章会告诉你它就是集合的包含关系。
⭐ 这就是形式化的收益:原来两个人吵「这句话到底什么意思」,谁也说服不了谁; 现在变成两张真值表,指着第 1 行说「你的读法这里是 T、我的是 F」,争论就结束了。
🏷️ 六、三种公式:恒真、矛盾、可满足
看「最后一列」有多少个 T,公式就分成三类:
| 类别 | 定义 | 例子 | 最后一列长什么样 |
|---|---|---|---|
| 恒真式 / 重言式(valid, tautology) | 在所有模型下都真 | P ∨ ¬P、上面那个 (R ∧ S) → (¬R ∨ S) |
全 T |
| 可满足(satisfiable) | 至少一个模型下真 | P ∧ Q、¬P → ¬Q |
至少一个 T |
| 不可满足 / 矛盾(unsatisfiable) | 没有任何模型下真 | P ∧ ¬P |
全 F |
⚠️ 恒真的一定可满足,反过来不成立。三类不是并列的,是套着的。
⭐ 一条要背下来的对偶
$$\varphi \text{ 恒真} \iff \neg\varphi \text{ 不可满足}$$
理由一句话:φ 每行都 T ⟺ ¬φ 每行都 F。
⭐ 别小看这一条。第 5 章整套「反证法 + 分辨率」的合法性, 全靠它:想证一个东西恒真,就去证它的否定推不出任何一个可能世界。 计算机不擅长「检查所有情况都对」,但很擅长「把所有情况都堵死」。
💥 七、真值表能解决一切——代价是 2ⁿ
好消息:命题逻辑是可判定的。任何问题(这公式恒真吗?可满足吗?)都能靠真值表在有限步内回答。
坏消息:
| 命题符号个数 | 真值表行数 |
|---|---|
| 10 | 1024 |
| 20 | 约 100 万 |
| 40 | 约 1 万亿 |
| 60 | 约 10 亿亿(现有算力做不完) |
⭐ 而现实里的 SAT 问题动辄几万到几百万个变量。所以真值表是「理论上行、实践上死」的方法。 第 5 章给出的分辨率法最坏情况仍是指数的,但它有一个真值表没有的性质: ⭐ 它常常在遍历完所有世界之前就结束——因为它不查世界,它推符号。
🔗 这一章连到哪里
| 去哪 | 为什么 |
|---|---|
| 04 · 模型集 | ⭐ 直接回答本章第五节留下的问题:「B 比 A 更强」到底是什么关系(答案:集合包含);顺带把五个连接词全部翻译成集合运算 |
| 05 · 推理与分辨率 | 第六节那条「恒真 ⟺ 否定不可满足」是那一章全部套路的地基;也是绕开第七节 2ⁿ 爆炸的出路 |
| 06 · 一阶逻辑 | 本章第一节那个代价——P 里面的「苏格拉底」和「秃头」丢了——在那里被找回来 |
| 不靠数据的 AI 19 · 经典 NLP | ⭐⭐ 本章第三节那套 BNF 递归规则的正主:形式文法怎么划定「什么样的串合法」,以及它今天最赚钱的用法 —— 约束解码(每步用文法算出下一个 token 的合法集合,让 LLM 只吐得出合法 JSON / SQL) |
| 智能体工程教程 16c · 接进真实产品 | ⭐ 同一个想法在 LLM 工具调用里的样子:把 schema 交给 API,解码阶段就受它约束。⚠️ 那一章还点破了本章第三节的同一条边界 —— schema 只是一份「形状说明书」,保证格式对、不保证内容对,正如这里「语法只管形状,意思要等语义」 |
✅ 检查点
- 什么样的句子才能当命题?举两个不能当命题的例子。
- 用一个字母代替一整句话,代价是什么?这个代价具体挡住了哪一类推理?
P ∨ Q在「P、Q 都真」时是真还是假?要表达「二选一,不能都要」该怎么写?P → Q什么时候为假?「如果我是外星人,那么我会飞」是真是假,为什么?- n 个命题符号有多少个模型?手算真值表的技巧是什么?
- 「学生不来上课就能通过考试,这是不成立的」的两种读法各是什么公式?真值表里差几行?哪个更强?
- 恒真、可满足、不可满足怎么定义?「φ 恒真 ⟺ ¬φ 不可满足」为什么成立,它有什么用?
- 命题逻辑是可判定的,为什么真值表法在实践中还是不够用?
👀 答案
- 有明确真假的陈述句。不能当命题的:疑问句(「今天天气怎么样?」)、祈使句(「把门关上」)、含糊的句子(「这段文字挺好的」——好到什么程度算好没画线)。
- 代价是句子内部结构全丢了:
P里的「苏格拉底」「秃头」在命题逻辑里看不见。⭐ 这挡住的是依赖对象和性质的推理——「所有人都会死 + 苏格拉底是人 ⟹ 苏格拉底会死」在命题逻辑里推不出来,要等第 6 章的谓词和量词。 - 真——
∨是可兼或。要表达排斥或得自己写(P ∨ Q) ∧ ¬(P ∧ Q)。⭐ 第 2 章那个「汤或沙拉」的歧义,在这里被强行钉死成可兼或。 - 只在 P 真而 Q 假时为假(4 行里只有 1 行)。那句话是真的——因为「我是外星人」为假,蕴含自动为真,这叫空真。⭐
→表达的是「承诺」而不是因果:承诺的前提没发生,就没被违反。 - 2ⁿ 个。技巧:⭐ 每个子公式各占一列,从最内层往外填,每列只查一次基本真值表——4 行 6 列两分钟填完且不容易错。别想一口气算最外层。
- 读法 A
¬P → ¬Q(「不来上课就不会通过」),读法 B¬(¬P → Q)(「『不来也能过』不成立」)。⭐ 4 行里有 2 行不同(P、Q 都真那行和 P 真 Q 假那行)。B 更强:B 只在 FF 那一行为真,而那一行 A 也为真,反过来不成立。 - 恒真 = 所有模型下都真(最后一列全 T);可满足 = 至少一个模型下真;不可满足 = 没有任何模型下真(全 F)。⭐ 恒真 ⟺ ¬φ 不可满足,因为 φ 每行都 T ⟺ ¬φ 每行都 F。用处:第 5 章的反证法全靠它——证恒真改成证「否定之后一个可能世界都不剩」,计算机不擅长「检查所有情况都对」,但擅长「把所有情况堵死」。
- 因为行数是 2ⁿ:20 个符号约 100 万行,40 个约 1 万亿,60 个约 10 亿亿(现有算力做不完),而现实 SAT 问题动辄几万到几百万变量。⭐ 分辨率法最坏仍是指数,但它不查世界、只推符号,常常在遍历完所有模型之前就结束。
🛑 可以停在这里
⚡ 走神救援
命题逻辑 = 把一整句话塞进一个字母,只留真假,再用五个连接词拼起来。代价是句子内部结构全没了(
P里的「苏格拉底」「秃头」看不见),所以它推不出三段论——要等第 6 章。五个连接词:¬ ∧ ∨ → ↔。⚠️∨是可兼或(都真时也真,排斥或要写(P ∨ Q) ∧ ¬(P ∧ Q));⚠️P → Q只在「P 真 Q 假」一行为假,所以 P 假时它自动为真(空真)——「如果我是外星人那么我会飞」是真的;→表达承诺不表达因果。语法用 BNF 递归定义(「句子」的定义里又出现「句子」),判断合法与否纯机械;A + B、A ¬ B都不是公式。⭐ 到语法为止公式什么意思都没有。语义:一个模型就是一次真值指派,n 个符号有 2ⁿ 个模型;手算真值表的技巧是⭐ 每个子公式各占一列、从最内层往外填。⭐⭐ 本章的杀手例:「学生不来上课就能通过考试,这是不成立的」有两种读法——A:¬P → ¬Q、B:¬(¬P → Q),真值表 4 行里有 2 行不同,而且 B 只在 P、Q 全假那一行为真,A 在那行也真 → B 严格更强(这个「更强」到下一章会变成集合包含)。形式化的收益就在这:争论变成指着真值表第 1 行说「你这里是 T、我这里是 F」。三类公式:恒真(全 T,如P ∨ ¬P、(R ∧ S) → (¬R ∨ S))、可满足(至少一个 T)、不可满足(全 F,如P ∧ ¬P),三者是套着的不是并列的。⭐ 要背的一条:φ 恒真 ⟺ ¬φ 不可满足——第 5 章的反证法全靠它。命题逻辑可判定,但真值表是 2ⁿ:20 个符号 100 万行、40 个 1 万亿、60 个 10 亿亿,而真实 SAT 问题有几万到几百万变量——理论上行、实践上死。
下一节 👉 04-模型集.md ⭐⭐
去那里的理由:本章你一直在填真值表的「行」。04 把这些行收成一个集合, 于是连接词全部变成集合运算,「蕴含」变成一张文氏图——这是整段逻辑最漂亮的一次视角切换。