馆长递来一本魔法书。数学是万事的根基。
元数据卡
- 前置知识:高中数学基础
- 预计时间:50 分钟
- 核心难度:入门
- 完成标志:能够将自然语言命题翻译为逻辑表达式,构造真值表,理解谓词与量词的含义
你的进度
你走进数学塔,一层大厅里整齐排列着许多石门,每扇门上刻着一段文字。馆长站在第一扇门前,示意你注意看——门上的文字不是普通的句子,而是由符号组成的判断句。
你的任务
你面前有一个判断系统,输入一句话,输出真或假。"如果今天下雨,路就会湿"——这个推理为什么成立?你的任务是把人类语言的模糊表达,转换为精确的逻辑符号,让计算机能够判断"这句话是不是真的"。
本章分层
- 必读:命题逻辑基础,真值表,谓词与量词
- 选读:推理规则的形式化
破局 · 溯源
假设你遇到一个代码 bug。条件语句 if (a > 0 || b < 10) { ... } 中,a 和 b 的值满足预期,但代码就是不执行。你盯着条件看了三分钟——这时候你需要的不是调试器,而是逻辑。
计算机的每一个判断,归根结底都是逻辑运算。if、while、for 的条件表达式,数据库的 WHERE 子句,正则表达式的匹配规则——它们共享同一套底层的逻辑体系。这个体系就是命题逻辑。
命题是一个能判断真假的陈述句。"2 是素数"是真命题。"5 < 3"是假命题。"你好吗?"不是命题——它无法判断真假。
命题逻辑研究如何将简单命题用逻辑联结词组合成复合命题。五个基本联结词:
| 名称 | 符号 | 含义 | 类似代码写法 |
|---|---|---|---|
| 否定 | ¬ | "非" | !p |
| 合取 | ∧ | "且" | p && q |
| 析取 | ∨ | "或" | p || q |
| 蕴含 | → | "如果...则" | if (p) q |
| 等价 | ↔ | "当且仅当" | p == q |
构造一个简单例子。令 p 表示"今天是晴天",q 表示"我去跑步"。
- p ∧ q:今天是晴天且我去跑步
- p → q:如果今天是晴天,我就去跑步
- ¬p ∨ q:要么不是晴天,要么我去跑步
等等——p → q 和 ¬p ∨ q 居然等价?验证一下:
当 p 为假(不是晴天),p → q 为真("如果晴天则跑步"这个承诺没有被破坏)。当 p 为真(是晴天),p → q 的真假取决于 q——如果真去跑步,承诺兑现;如果没去,承诺被打破。
这个对应关系写成表格就是真值表:
p q p → q ¬p ∨ q
T T T T
T F F F
F T T T
F F T T两者完全一致。这就是逻辑等价——在不同写法之间建立可靠的桥梁。
有了命题逻辑,你能表达"p 且 q",但遇到"所有的苹果都是水果"这类句子就力不从心了。这里需要一个更强的东西:谓词逻辑。
谓词是带变量的判断。IsApple(x) 表示"x 是苹果"。IsFruit(x) 表示"x 是水果"。组合起来:
- 所有的苹果都是水果:
∀x (IsApple(x) → IsFruit(x)) - 存在一个红色的苹果:
∃x (IsApple(x) ∧ IsRed(x))
∀ 是全称量词(所有),∃ 是存在量词(存在)。这是编程中最常用到的逻辑工具。类型系统的本质就是谓词逻辑——∀T 是泛型,∃T 是存在类型。
回到调试器前。条件表达式 a > 0 || b < 10 可以写成命题逻辑:p 是 a > 0,q 是 b < 10。整个条件是 p ∨ q。取反后是 ¬p ∧ ¬q(德·摩根律)。如果代码不执行,要么是 a ≤ 0 且 b ≥ 10。逻辑不能替你改 bug,但它能精确告诉你 bug 的条件。
常见陷阱
- 将蕴含(→)误解为因果关系。"p → q" 在 p 为假时永远为真,不要求 p 和 q 有现实联系。"如果月亮是芝士做的,那么 1+1=3" 在逻辑上是真命题——前提假,结论无所谓。
- 混淆"或"的排他和包含。"或者"在日常用语中有两种含义,计算机的
||是包含或(至少一个为真),而"要么...要么..."是排他或(恰好一个为真)。 - 量词作用域错误。
∀x P(x) ∧ Q(x)与∀x (P(x) ∧ Q(x))不同。前者是说"所有 x 都满足 P,且 Q(x)(可能 x 自由)"——但 Q(x) 中的 x 未受约束,这是错误的写法。
通关挑战
- 将"如果服务器负载过高,则新的请求会被拒绝"翻译为命题逻辑表达式。
- 构造 (p ∧ q) ∨ r 的真值表。
- 将"每个用户都有一个唯一的 ID"翻译为谓词逻辑。
旅人笔记
逻辑是计算机判断力的数学表达。命题逻辑处理简单真值,谓词逻辑引入变量和量化——你从这里开始,建立精确思考的能力。
→ 下一站预告:有了判断真假的工具,接下来自然想知道"什么东西属于什么集合"——集合论会给你更底层的分类能力。