【CS70】Lec 2 - Proof

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)$

  • 思路

    1. 假设 $P(x)$ 成立(对一个一般性的 $x$)
    2. 通过逻辑推理与代数变换
    3. 得出 $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

方法概述

  • 基本思想

    1. 想证明命题 $P$
    2. 先假设 $\lnot P$(命题不成立)
    3. 通过逻辑推导,得到矛盾($R \land \lnot R$)
    4. 因此 $\lnot P$ 不可能,$P$ 必然成立
  • 逻辑原理

    • 依赖于“排中律”:命题非真即假
    • 若假设“非真”导致矛盾,则必然“为真”

示例 1:素数无限性

Theorem 2.6
素数有无限多个。

证明(Euclid 经典反证法):

  1. 假设只有有限多个素数:$p_1, p_2, \dots, p_k$
  2. 构造 $q := p_1 p_2 \cdots p_k + 1$
  3. $q$ 不是列表中的任意素数(因为它比每个都大)
  4. 按照 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)
  5. 因此假设错误 → 素数必然无限 ∎

示例 2:$\sqrt{2}$ 的无理性

Theorem 2.7
$\sqrt{2}$ 是无理数。

证明

  1. 假设 $\sqrt{2}$ 是有理数,则存在互素整数 $a,b$ 使 $\sqrt{2} = \tfrac{a}{b}$
  2. 推出 $a^2 = 2b^2$ → $a^2$ 是偶数 → $a$ 是偶数
    • 设 $a=2c$
    • 代入得 $b^2 = 2c^2$ → $b$ 也是偶数
  3. 结论:$a,b$ 都是偶数 → 有公因子 2
  4. 这与假设“$a,b$ 互素”矛盾
  5. 因此 $\sqrt{2}$ 不可能是有理数,证毕 ∎

反证法常用场景

  • 证明“不存在”类命题:
    • 如“最大素数不存在”
    • 如“$\sqrt{2}$ 不能写成有理数”
  • 证明“不可能”类结论:
    • 如“假设 $x=y$ 推出矛盾”

[!warning]
写反证法时常见错误:

  • 忘记明确假设“欲证命题的否定”
  • 推出与结论无关的矛盾(必须是“逻辑上不可能”)
  • 陷入循环论证(即在推导中偷偷使用了结论本身)

6. Proof by Cases(分类讨论)

方法概述

  • 有时我们无法直接证明某个命题,因为情况不唯一
  • 但是可以确定:若干互斥的情形中至少有一个必然成立
  • 证明思路
    1. 将问题划分为有限个“情况”(cases)
    2. 分别在每个情况中证明命题成立
    3. 由于必有一个情况成立,因此结论总是成立

示例:存在无理数 $x,y$ 使得 $x^y$ 是有理数

Theorem 2.8
存在无理数 $x,y$,使得 $x^y$ 是有理数。

证明(分类讨论):

  1. 考虑 $x = \sqrt{2}$,$y = \sqrt{2}$
  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$ 是有理数 → 命题成立
  1. 无论哪种情况,命题都成立 ∎

非构造性证明 (Non-constructive proof)

  • 上面的证明展示了 某个对象存在,但没有明确告诉我们“到底是哪一个”
  • 即:
    • 我们知道存在满足条件的 $(x,y)$
    • 但无法确定是 $(\sqrt{2}, \sqrt{2})$ 还是 $(\sqrt{2}^{\sqrt{2}}, \sqrt{2})$
  • 这种证明被称为 非构造性证明

分类讨论的应用场景

  • 数学归纳法中的“奇数/偶数”情况划分
  • 数论中按模数余数分类
  • 分析中讨论“$x \ge 0$ 或 $x < 0$”

[!example]
练习

  1. 用分类讨论法证明:任意整数 $n$,$n^2 \equiv 0 \text{ 或 } 1 \pmod 4$
  2. 证明:若 $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

写证明的基本原则

  • 每一步推理都要有依据(定义、公理、定理或代数规则)
  • 不能跳跃性过大,否则读者无法理解逻辑链条
  • 证明的目标不仅是 正确,更是 清晰、易懂

何时需要详细展开?

  • 理论上:每一步都应该追溯到定义/公理
  • 实际上:不必在常识/显然步骤上过度展开
  • 取舍标准
      1. 自己能解释清楚为什么这一步成立
      1. 读者能“自动同意”这一步成立

使用引理(Lemma)

  • 定义:在证明大定理时,单独抽出的小结论
  • 好处:
    • 分解复杂证明 → 类似于程序设计里的子函数
    • 提高可重用性 → 引理可以在多个证明中使用
  • 例子
    • 在证明 $\sqrt{2}$ 无理时,用到的引理:

      若 $a^2$ 是偶数,则 $a$ 是偶数。

[!example]
编程类比

  • 定理(Theorem) = 最终输出的程序功能
  • 引理(Lemma) = 中间写的小函数
  • 推论(Corollary) = 根据已有函数结果立即得到的副作用结果

引理 vs 定理

  • 定理(Theorem):证明的“主角”,要向外界传递的核心结果
  • 引理(Lemma):在定理证明内部服务的辅助结论
  • 但二者并没有严格界限:有时某些“引理”比定理更著名(如 Pumping Lemma

风格建议

  1. 明确写出所用的证明方法(例如“我们用反证法”)
  2. 分段书写:把证明分块,逻辑更清晰
  3. 善用记号:提前定义变量和符号,避免混乱
  4. 减少废话:用简洁的语言直击逻辑核心
  5. 视觉层次清晰:公式对齐、重点突出
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计