1. Proofs
学习目标
- 理解什么是数学证明以及它为何在计算机科学中重要
- 掌握“有限推理 → 证明无限情形”的核心思想
- 了解证明与程序/逻辑电路之间的联系与区别
证明的定义(Definition)
- 证明(proof):从一组公理/公设(axioms/postulates)与已知定义出发,按照逻辑规则进行的一串有限推理步骤(logical deductions),以确证一个命题为真。
- 关键特性:用有限的论证,保证无限多情形(如“对所有输入”“对所有自然数”)都成立。
[!warning]
仅用大量样例“测试”一个全称命题(如“对所有 $x$,性质 $P(x)$ 成立”)不能替代证明。样例只能提供经验性“证据”,而无法涵盖未测试的无限多情形。
证明为何必要(Why Proofs)
- 科学方法:通过实验积累证据支撑结论;可能随新证据被修正。
- 数学方法:通过严格证明得到确定性结论;只要公理与推理无误,命题真值不可动摇。
- 计算机科学中的典型需求:
- 终止性:程序 $P$ 是否对所有输入都终止?
- 正确性:程序 $P$ 是否对所有输入 $x$ 都输出期望的 $f(x)$?
证明与计算机/逻辑的关系
- 证明像“程序”:输入为假设/公理,推理规则像“指令集/电路门”,输出为结论。
- 逻辑规则既支撑数字电路设计(与/或/非),也支撑自动推理/AI中的形式化推断。
一个通用的写作框架(建议模板)
- 已知(Given):罗列前提、定义、公理与记号。
- 欲证(Goal):清晰写出要证明的命题。
- 证明(Proof):逐步推理,每一步给出可追溯的理由(定义、引理、定理、代数变形、逻辑等价)。
- 结束语:用 ■ 或 “∎/QED” 标注完结,或点明关键等价/蕴含链条已闭合。
命题的量化形式(在证明中的常见形态)
- 全称命题:$\forall x; P(x)$
- 证明策略:取任意但固定的 $x$,在不对 $x$ 做特殊假设的前提下导出 $P(x)$。
- 存在命题:$\exists x; P(x)$
- 证明策略:构造具体见证 $x_0$ 并证明 $P(x_0)$。
常用证明技法(本讲后续将详细展开)
- 直接证明(Direct Proof):由前提逐步推出结论 $P\Rightarrow Q$。
- 对当/逆否证明(Contraposition):证 $\lnot Q\Rightarrow \lnot P$ 等价于 $P\Rightarrow Q$。
- 反证法(Contradiction):假设命题为假,推出矛盾。
- 分类讨论(Cases):覆盖所有可能情形,分别证明。
写作与思维要点
- 每一步都应有据可依(定义、恒等式、已知结论);避免“逻辑跳跃”。
- 对“任意”对象的证明,不得使用其特例性质(否则破坏全称性)。
- 证明中使用的记号/对象应提前定义,避免歧义。
术语速览
术语 | 含义 | 备注 |
---|---|---|
Axiom / Postulate | 公理/公设 | 无需证明、作为推理起点 |
Proposition / Theorem | 命题 / 定理 | 本节关注命题的证明 |
Lemma | 引理 | 为证明更大结果服务的中间结论 |
Corollary | 推论 | 由定理/引理立即推出的结论 |
Logical Deduction | 逻辑推演 | 由前提按规则推出新断言 |
2. Notation and Basic Facts
常见集合
-
整数集
$\mathbb{Z} = {\dots, -2, -1, 0, 1, 2, \dots}$- 对加法、乘法封闭
- 即:若 $a,b \in \mathbb{Z}$,则 $a+b, ab \in \mathbb{Z}$
-
自然数集
$\mathbb{N} = {0,1,2,\dots}$- 对加法、乘法封闭
- 在本课程中常把 $0$ 包含在内(有时也记作 $\mathbb{N}^+$ 表示不含 0)
整除 (Divisibility)
-
定义:
对整数 $a, b$,若
$a \mid b \iff \exists q \in \mathbb{Z},; b = aq$
则称“$a$ 整除 $b$”。 -
例子:
- $2 \mid 10$,因为存在 $q=5$ 使 $10 = 2 \cdot 5$
- $3 \nmid 10$,因为不存在整数 $q$ 满足 $10 = 3q$
素数 (Prime Numbers)
- 定义:自然数 $p \geq 2$,若 $p$ 仅能被 1 和 自身整除,则称为 素数
- 例子:2, 3, 5, 7, 11, 13, …
- 非素数称为 合数 (composite)
定义符号
- $:=$ 表示“定义为”
- 例:
- $q := 6$ 表示 定义变量 $q$ 为 6
小结
- 整数/自然数 → 对运算封闭
- 整除 → 存在性定义(引入 $q$)
- 素数 → “最小不可再分”的整数构件
[!warning]
常见误区:
- 遗漏 $0$:注意 $a \mid 0$ 对所有 $a \in \mathbb{Z}$ 都成立(因为 $0=aq$ 且 $q=0$)。
- 素数与 1:1 不是素数(它只满足“被 1 和自己整除”但不符合定义 $p \ge 2$)。
3. Direct Proof
方法概述
-
命题形式:$P(x) \Rightarrow Q(x)$
-
思路:
- 假设 $P(x)$ 成立(对一个一般性的 $x$)
- 通过逻辑推理与代数变换
- 得出 $Q(x)$ 成立
-
关键要点:
- 不取具体数值,而是对“任意”对象推理
- 证明过程必须在一般性假设下有效 → 保证“全称性”
示例 1:整除的封闭性
Theorem 2.1
对于任意 $a,b,c \in \mathbb{Z}$,若 $a \mid b$ 且 $a \mid c$,则 $a \mid (b+c)$。
证明:
- 已知:$a \mid b, a \mid c$
- 等价于:存在整数 $q_1, q_2$ 使得
$b = q_1 a, \quad c = q_2 a$ - 相加得:
$b+c = q_1 a + q_2 a = (q_1+q_2)a$ - 因为 $\mathbb{Z}$ 对加法封闭,$q_1+q_2 \in \mathbb{Z}$
- 因此 $a \mid (b+c)$,证毕。 ∎
示例 2:9 的整除判别法
Theorem 2.2
若 $0<n<1000$ 且 $n$ 的数位和能被 9 整除,则 $n$ 能被 9 整除。
证明:
- 设 $n = 100a + 10b + c$,其中 $a,b,c$ 为数位
- 假设 $a+b+c = 9k$
- 则
$$ n = 100a+10b+c = 99a+9b+(a+b+c) = 99a+9b+9k $$$$ = 9(11a+b+k) $$
- 所以 $n$ 可被 9 整除,证毕。 ∎
示例 3:逆命题与等价
Theorem 2.3(Theorem 2.2 的逆命题)
若 $n$ 能被 9 整除,则 $n$ 的数位和能被 9 整除。
证明:
- 设 $n=100a+10b+c=9l$
- 整理:
$$ a+b+c = 9(l-11a-b) $$
- 所以 $a+b+c$ 能被 9 整除。 ∎
结论:
- $n$ 能被 9 整除 $\iff$ 数位和能被 9 整除
- 证明等价命题的方法:
- 分别证明 $P \Rightarrow Q$ 和 $Q \Rightarrow P$
直接证明的常见应用场景
- 数论:整除、同余
- 代数:封闭性、结合律、交换律
- 分析:不等式、极限运算
[!warning]
直接证明的陷阱:
- 不要使用具体实例来代替一般性证明
- 避免循环论证(不能直接假设结论)
- 注意边界情况(如 0,负数,极端值)
4. Proof by Contraposition(逆否证明)
方法概述
-
逻辑等价:
$$ (P \Rightarrow Q) \iff (\lnot Q \Rightarrow \lnot P) $$ -
思路:
- 想证明 $P \Rightarrow Q$
- 反而从“假设 $\lnot Q$”出发
- 推导出 $\lnot P$
- 因为两者逻辑等价,所以 $P \Rightarrow Q$ 得证
-
常用场景:
- 直接证明困难时
- 逆否命题更容易入手
示例 1:因子与奇偶性
Theorem 2.4
设 $n$ 是正整数,且 $d \mid n$。若 $n$ 是奇数,则 $d$ 是奇数。
- 原命题:$n$ 奇数 $\Rightarrow d$ 奇数
- 逆否命题:$d$ 偶数 $\Rightarrow n$ 偶数
证明:
- 假设 $d$ 是偶数,则 $d=2k$
- 因为 $d \mid n$,所以 $n=dl=2kl$
- 故 $n$ 是偶数
- 证毕 ∎
示例 2:鸽笼原理(Pigeonhole Principle)
Theorem 2.5
设 $n,k$ 为正整数,将 $n$ 个物体放入 $k$ 个盒子。若 $n>k$,则至少一个盒子中含有多个物体。
证明(逆否法):
- 假设每个盒子中至多 1 个物体
- 则物体总数 $n \leq k$
- 这与 $n>k$ 矛盾
- 因此命题成立,证毕 ∎
逆否证明的优势
- 在证明“若 … 则 …”时,逆否命题往往更自然
- 例如:证明“$n$ 为奇数 $\Rightarrow$ $d$ 为奇数”比较困难
但“$d$ 为偶数 $\Rightarrow$ $n$ 为偶数”却容易直接代数化
[!warning]
写证明时应 明确写出所用的方法:
- 开头说明“我们使用逆否证明法”
- 类似于写程序时加注释,让读者清楚思路
- 在作业/考试中更容易得到高分
5. Proof by Contradiction
方法概述
-
基本思想:
- 想证明命题 $P$
- 先假设 $\lnot P$(命题不成立)
- 通过逻辑推导,得到矛盾($R \land \lnot R$)
- 因此 $\lnot P$ 不可能,$P$ 必然成立
-
逻辑原理:
- 依赖于“排中律”:命题非真即假
- 若假设“非真”导致矛盾,则必然“为真”
示例 1:素数无限性
Theorem 2.6
素数有无限多个。
证明(Euclid 经典反证法):
- 假设只有有限多个素数:$p_1, p_2, \dots, p_k$
- 构造 $q := p_1 p_2 \cdots p_k + 1$
- $q$ 不是列表中的任意素数(因为它比每个都大)
- 按照 Lemma 2.1:任意大于 1 的数要么是素数,要么有素数因子
- 若 $q$ 是素数 → 矛盾(它应在列表外)
- 若 $q$ 有素数因子 $p$ → $p \mid q$ 且 $p \mid p_1 p_2 \cdots p_k$
- 推出 $p \mid (q - p_1 p_2 \cdots p_k) = 1$
- 矛盾(没有素数能整除 1)
- 因此假设错误 → 素数必然无限 ∎
示例 2:$\sqrt{2}$ 的无理性
Theorem 2.7
$\sqrt{2}$ 是无理数。
证明:
- 假设 $\sqrt{2}$ 是有理数,则存在互素整数 $a,b$ 使 $\sqrt{2} = \tfrac{a}{b}$
- 推出 $a^2 = 2b^2$ → $a^2$ 是偶数 → $a$ 是偶数
- 设 $a=2c$
- 代入得 $b^2 = 2c^2$ → $b$ 也是偶数
- 结论:$a,b$ 都是偶数 → 有公因子 2
- 这与假设“$a,b$ 互素”矛盾
- 因此 $\sqrt{2}$ 不可能是有理数,证毕 ∎
反证法常用场景
- 证明“不存在”类命题:
- 如“最大素数不存在”
- 如“$\sqrt{2}$ 不能写成有理数”
- 证明“不可能”类结论:
- 如“假设 $x=y$ 推出矛盾”
[!warning]
写反证法时常见错误:
- 忘记明确假设“欲证命题的否定”
- 推出与结论无关的矛盾(必须是“逻辑上不可能”)
- 陷入循环论证(即在推导中偷偷使用了结论本身)
6. Proof by Cases(分类讨论)
方法概述
- 有时我们无法直接证明某个命题,因为情况不唯一
- 但是可以确定:若干互斥的情形中至少有一个必然成立
- 证明思路:
- 将问题划分为有限个“情况”(cases)
- 分别在每个情况中证明命题成立
- 由于必有一个情况成立,因此结论总是成立
示例:存在无理数 $x,y$ 使得 $x^y$ 是有理数
Theorem 2.8
存在无理数 $x,y$,使得 $x^y$ 是有理数。
证明(分类讨论):
- 考虑 $x = \sqrt{2}$,$y = \sqrt{2}$
- 分两种情况:
Case (a)
- 假设 $\sqrt{2}^{\sqrt{2}}$ 是有理数
- 则直接取 $x=\sqrt{2}, y=\sqrt{2}$,结论成立
Case (b)
- 假设 $\sqrt{2}^{\sqrt{2}}$ 是无理数
- 此时取 $x = \sqrt{2}^{\sqrt{2}}, y = \sqrt{2}$
- 那么:
$$ x^y = \left(\sqrt{2}^{\sqrt{2}}\right)^{\sqrt{2}} = \sqrt{2}^{(\sqrt{2}\cdot \sqrt{2})} = \sqrt{2}^2 = 2 $$
- $2$ 是有理数 → 命题成立
- 无论哪种情况,命题都成立 ∎
非构造性证明 (Non-constructive proof)
- 上面的证明展示了 某个对象存在,但没有明确告诉我们“到底是哪一个”
- 即:
- 我们知道存在满足条件的 $(x,y)$
- 但无法确定是 $(\sqrt{2}, \sqrt{2})$ 还是 $(\sqrt{2}^{\sqrt{2}}, \sqrt{2})$
- 这种证明被称为 非构造性证明
分类讨论的应用场景
- 数学归纳法中的“奇数/偶数”情况划分
- 数论中按模数余数分类
- 分析中讨论“$x \ge 0$ 或 $x < 0$”
[!example]
练习
- 用分类讨论法证明:任意整数 $n$,$n^2 \equiv 0 \text{ 或 } 1 \pmod 4$
- 证明:若 $n$ 是整数,则 $n$ 要么是偶数,要么是奇数(不能同时是两者)
[!warning]
分类讨论证明常见错误:
- 漏掉某些情况(导致证明不完整)
- 情况之间有重叠(导致推理不严谨)
7. Common Errors When Writing Proofs
错误 1:假设结论为真
- 错误示例
- 命题:$-2 = 2$
- “证明”:假设 $-2=2$,两边平方得 $4=4$,于是结论成立。
- 问题:
- 这是循环论证(begging the question)。
- 实际上证明的是 $P \Rightarrow \text{True}$,而不是 $P$ 本身。
[!warning]
证明中 不能直接假设要证明的命题为真。必须从前提或公理出发。
错误 2:忽视零的特殊性
- 错误示例
- 命题:$1 = 2$
- “证明”:
$$ x=y \quad \Rightarrow \quad x^2-xy = x^2-y^2 $$$$ \Rightarrow x(x-y)=(x+y)(x-y) $$$$ \Rightarrow x=x+y \quad (\text{两边同时除以 } x-y) $$$$ \Rightarrow x=2x $$取 $x=y=1$ 得 $1=2$。
- 问题:
- 这里除以 $x-y$,但 $x=y$ 时 $x-y=0$。
- 除以零是未定义的操作 → 推理无效。
[!warning]
在代数证明中一定要考虑 零的特殊情况,避免除以零。
错误 3:不正确地处理不等式
- 错误示例
- 命题:$4 \leq 1$
- “证明”:已知 $-2 \leq 1$,两边平方,得 $4 \leq 1$。
- 问题:
- 平方并不保持不等式方向。
- 一般来说,$a \leq b \nRightarrow a^2 \leq b^2$。
- 例:$a=-2, b=1$,则 $a<b$ 但 $a^2 > b^2$。
[!example]
正确处理方式:
- 若 $a \leq b$ 且 $a,b \geq 0$,则可推出 $a^2 \leq b^2$。
- 若 $a \leq b < 0$,则平方会翻转不等式方向。
总结
- 常见错误包括:
- 循环论证:假设结论为真
- 忽略零:除以零或未检查边界情况
- 不当操作:对不等式或平方根进行错误推理
[!note]
写证明时要特别小心:
- 检查推理链条中是否有未定义的操作
- 考虑边界/极端情况(如 $0$、负数)
- 保持每一步逻辑正确且必要
8. Style and Substance in Proofs
写证明的基本原则
- 每一步推理都要有依据(定义、公理、定理或代数规则)
- 不能跳跃性过大,否则读者无法理解逻辑链条
- 证明的目标不仅是 正确,更是 清晰、易懂
何时需要详细展开?
- 理论上:每一步都应该追溯到定义/公理
- 实际上:不必在常识/显然步骤上过度展开
- 取舍标准:
-
- 自己能解释清楚为什么这一步成立
-
- 读者能“自动同意”这一步成立
-
使用引理(Lemma)
- 定义:在证明大定理时,单独抽出的小结论
- 好处:
- 分解复杂证明 → 类似于程序设计里的子函数
- 提高可重用性 → 引理可以在多个证明中使用
- 例子:
- 在证明 $\sqrt{2}$ 无理时,用到的引理:
若 $a^2$ 是偶数,则 $a$ 是偶数。
- 在证明 $\sqrt{2}$ 无理时,用到的引理:
[!example]
编程类比
- 定理(Theorem) = 最终输出的程序功能
- 引理(Lemma) = 中间写的小函数
- 推论(Corollary) = 根据已有函数结果立即得到的副作用结果
引理 vs 定理
- 定理(Theorem):证明的“主角”,要向外界传递的核心结果
- 引理(Lemma):在定理证明内部服务的辅助结论
- 但二者并没有严格界限:有时某些“引理”比定理更著名(如 Pumping Lemma)
风格建议
- 明确写出所用的证明方法(例如“我们用反证法”)
- 分段书写:把证明分块,逻辑更清晰
- 善用记号:提前定义变量和符号,避免混乱
- 减少废话:用简洁的语言直击逻辑核心
- 视觉层次清晰:公式对齐、重点突出