前面几章里,我们已经认识了集合、关系和函数,也学会了用量词把一句数学话说准确。现在要跨过一道很明显的门槛:以前的问题常常是“算出什么”,这一章的问题却变成了“你凭什么确定它总是这样”。
第一次写证明,最让人发愁的通常不是某一步算不动,而是不知道第一行该写什么。题目只给出一句“若 ,则 ”,答案却像是突然想到了一串漂亮变形。真正的思考过程被藏起来以后,证明看上去就很像猜谜。
这一章会把那段被藏起来的过程摊开。我们先读清论域、量词、假设和结论,再根据结论寻找定义形式;如果一条路走不通,就看看是否应该分类;如果怀疑命题是假的,就有目的地构造反例。这样做几次以后,你会发现证明并不是从空白处灵光一现,而是不断回答“下一步需要什么”。

证明的任务不是展示你算过多少例子,而是给出一条可以复查的推理链。读者应该能看见每一步用了哪个假设、哪个定义或哪个已经知道的事实。
证明针对的是一个真假确定的陈述。像“ 是奇数”是命题;“ 是奇数”还缺少 的取值,严格说只是一个含变量的条件。给它加上论域和量词,例如“存在整数 ,使 是奇数”,它才成为完整命题。
这一区分看似细小,却直接决定证明方法。下面两句话只差一个量词,任务完全不同:
第一句只需要给出一个见证,例如 。第二句声称每个整数的平方都是 ,取 就能推翻它。动笔之前不看量词,很容易证明了另一件事。
遇到一个待证命题,可以先在草稿上回答四个问题。
例如要证明
我们读到的信息是:对象是任意整数 ;可以使用的假设是“ 是偶数”;目标是让 符合偶数定义。于是草稿上的路线已经出现了:把已知的偶数写成 ,平方,再想办法把结果写成 乘一个整数。
对于一般形式
直接证明的开头不是挑一个顺眼的 ,而是“任取 ,假设 成立”。这个 没有任何特殊之处,所以只要接下来的推理不偷偷使用特殊数值,结论就覆盖了论域中的所有对象。
考虑集合的子集传递性:若 且 ,则 。这里没有数字可算,但定义已经告诉我们怎么开始。
要证明 ,实际要证明的是
于是我们任取 。由 得到 ,再由 得到 。因为这个 是 中任取的元素,所以 。
这段证明很短,却包含了本章的核心动作:结论的定义决定我们任取什么,假设的定义决定下一步能推出什么。 集合、关系和函数并没有在上一章结束,它们正在变成证明的练习场。
“偶数”“整除”“子集”“单射”都是压缩过的说法。它们适合陈述结论,却不一定适合直接推理。证明时,我们常常要把压缩包打开。
在整数范围内,常用定义包括:
集合与函数的定义也能用同样的方式展开:

如果题目已知 是偶数,我们可以拆开定义,写成“存在整数 ,使 ”。这里的 是由假设保证存在的,不是随便挑的。
如果题目要求证明某个表达式 是偶数,我们要做相反的事:找到一个整数 ,使 。等式只是中间结果,说明 是整数并回到偶数定义,证明才结束。
这两个方向经常被初学者混在一起。要证明 是偶数时,一上来写“设 ”等于把结论直接当成已知;正确做法是先展开题目真正给出的“ 是偶数”。
在 、 或 后面,别漏掉“其中 ”。若 可以是任意实数,那么每个实数都能写成 ,偶数定义也就失去意义了。
命题:若整数 都是奇数,则 是偶数。
先别急着写成稿。我们在草稿上问:结论“ 是偶数”要求什么?要求把 写成 乘一个整数。假设能提供什么?两个奇数分别能写成 乘整数再加 。把这两种形式相加,两个多出来的 正好凑成 。这就是下一步的来源。
任取整数 ,并假设它们都是奇数。
由奇数定义,存在整数 ,使得 且 。这里用两个名字,是因为表示 与 的整数不必相同。
一个很常见的错误是写“”。这会额外假设 ,而题目没有给出这个条件。见证变量的名字不是装饰,它记录了每个存在性陈述可能对应不同的整数。
练习:证明若 是偶数,则 是偶数。
直接证明最适合形如“若 ,则 ”的命题。它不绕路:暂时站在 已经成立的情形里,使用定义、假设和已经知道的事实,一直推到 。
一份通用骨架可以写成:
任取论域中的一个对象,并明确假设 成立。
展开假设中的关键词,写出可以代入或使用的具体信息。
查看 的定义,确定最终需要制造的形式。
骨架解决的是“证明怎样组织”,不会自动给出中间那步变形。寻找中间步骤时,可以从两头看:假设现在能给我什么?结论最后需要什么?当这两边只差一个代入、因式分解或定义改写时,路线就接上了。
命题:若实数 满足 ,则
草稿阶段,我们可能先试 ,发现结果都为正。但这只能帮助猜想,不能证明整个区间。接着从目标往回想:常数 已经是正的,只要能证明 就够了。这个表达式含有 ,先提取公因子:
现在假设 恰好能控制三个因子的符号:、、。这时才找到了成稿需要的主线。
证明:设 。于是 、 且 ,所以
因此
这个例子很能说明“如何想到下一步”:我们没有凭空想到因式分解,而是先把目标削弱成“证明前半部分非负”,再寻找一个能让区间假设发挥作用的乘积形式。

命题:若整数 是偶数,则 是偶数。
思路:目标需要 。假设给出 。平方后会出现 ,把其中一个 提出来即可。
任取整数 ,并假设 是偶数。
由偶数定义,存在整数 ,使得 。
若证明停在 ,读者当然可能猜到结论,但作者还没有完成最后一次“装回定义”。好证明不会把关键收尾留给读者。
命题:设 与 都是单射,则复合函数 也是单射。
这一题没有偶数或整除,但“先看目标定义”仍然有效。要证明 是单射,我们需要任取 ,从
推出 。假设中的两个单射应该按什么顺序使用?复合函数的最外层是 ,所以先用 的单射性消掉外层,再用 的单射性。
证明:任取 ,并假设
由复合函数定义,
因为 是单射,所以 。又因为 是单射,所以 。这正符合单射定义,因此 是单射。
这段推理也展示了一个实用习惯:面对嵌套结构,先处理最外层。你不需要猜该先用哪个假设,表达式本身已经给出了顺序。
下面的拼装器提供偶数平方和整除传递性两个题目。先自己排列步骤,再观察“任取对象—使用假设—展开定义—代入计算—回到结论”为什么不能随意颠倒。
整除符号 很短,真正能运算的是它背后的存在性陈述:
读作“ 整除 ”时,别把注意力放在竖线长什么样,而要立刻想到: 里面藏着一个整数倍 。整除证明常用的动作就是给这个整数倍命名,然后代入。
命题:若 且 ,则 。
思路从目标开始:要证明 ,需要把 写成 乘一个整数。已知 给出 ,但这里还没有 ;另一个假设 给出 。把第二个式子代入第一个, 就会出现在 的表达式里。

任取整数 ,并假设 且 。
这里最好不要写成“由 和 ,约去 ,所以 ”。整除不是普通分数的大小比较,而且 还可能含有 。见证式 不需要做除法,对所有满足假设的整数都安全。
命题:若 且 ,则对任意整数 ,都有
我们为什么会想到分别设 ?因为目标 里同时出现 ,而两个假设恰好能让它们各自带出一个公因子 。
证明:任取整数 。由 与 ,存在整数 ,使 。于是
因为 都是整数,所以 是整数。因此 。
这个结论把“整除和”和“整除差”等事实放进了同一个框架。取 ,得到 ;取 ,得到 。先证明一个稍一般的结论,后面就不用重复相同的代入。
整数的加、减、乘仍是整数,这叫整数对这些运算封闭。整除证明结尾反复检查“括号里的表达式是整数”,用的就是这个事实。
练习:证明若 ,则对任意整数 ,都有 。
有些命题对所有对象都成立,但对象在不同情形下长得不一样。硬把所有情形塞进一串公式,反而会遮住结构。这时可以先把论域分开,在每个分支里证明同一个目标。
分类讨论最重要的要求是穷尽:每个允许的对象至少落入一个分支。各类互不重叠会让证明更整洁,但并非逻辑上必需;即使两个分支有重叠,只要它们合起来覆盖论域,而且每个分支都推出目标,证明仍然成立。
分类不是随便把对象切成几块。最有用的分类通常由题目中的结构提示:
选择分类后还要写出覆盖理由。例如“每个整数不是偶数就是奇数”“每个实数满足 或 ”。若只写“正数”和“负数”,就会漏掉 。
命题:对任意整数 , 是偶数。
先看目标:我们想找因子 。表达式可以写成 ,这是两个相邻整数;直觉上其中一个是偶数。要把这个直觉写成定义证明,最自然的办法就是按 的奇偶性分两类。

任取整数 。每个整数要么是偶数,要么是奇数,因此下面两类覆盖所有可能。
若 是偶数,则存在 ,使 。于是
两个分支里都用了字母 ,这不会像前面同时表示两个奇数那样造成问题,因为两个分支不会同时成立。若担心读者混淆,当然也可以在第二个分支改用 。
较长的证明可能出现子分类。做法和程序里的条件分支很像:先说明顶层分类为什么覆盖全部对象,再在某个分支里说明子分类为什么覆盖该分支。每个叶子都推出目标后,才沿着树向上收束。
不要只写“其余情况同理”。只有当其余分支的推理真的只需替换符号,而且替换关系一目了然时,这句话才够用。如果奇数分支需要另一种定义展开,就应当把它写出来。
下面的实验台可以切换奇偶分支,还能检查反例是否同时满足“前件真、结论假”。先观察分支怎样覆盖论域,再到反例区输入边界值和负数。
练习:证明对任意整数 , 与 有相同的奇偶性。
证明一个全称命题,需要覆盖论域中的每个对象;推翻它却只需要找到一个失败对象。这个对象就是反例。
对于
反例必须是某个 ,并且 为假。
对于条件形式
要求更精确:反例必须同时满足
只让结论失败还不够。如果前件也是假,这个对象根本没有进入命题承诺的情形。
构造反例时,可以按下面的顺序搜索。
先锁定论域。整数反例不能拿 充数,非空集合的命题也不能用空集推翻。
想办法让结论失败。若结论是严格不等式,可以尝试制造相等或反向;若结论说函数是单射,可以让两个不同输入得到同一输出。
错误命题:对所有整数 ,若 ,则 。
为什么应该试负数?因为平方会丢掉符号,离 更远的负数平方后可能反而更大。我们希望前件 保持为真,同时让平方后的大小反转,所以取一个绝对值较大的负数作 ,再取一个较小的正数作 。

取 。二者都是整数,而且 ,所以假设成立。但是
结论 不成立。因此 是反例,原命题为假。
取 就不是反例。虽然 不成立,但前件 也不成立。这组数没有推翻“若 ,则……”的承诺。
错误命题:对任意集合 ,若 ,则 。
这里等式两边都只看到了与 相交的部分。要让结论失败,可以把 的差异藏在 外面。取
此时 ,但 ,所以这是反例。
错误命题:每个函数 都是单射。
要破坏单射性,需要两个不同输入得到同一个输出。取 ,并定义
这是一个从 到 的函数,但 且 ,所以它不是单射。
这两个例子都不是“碰巧试到了”。我们先展开待破坏的结论,再按结论的失败条件设计对象。
一个成功例子可以证明存在命题。例如要证明“存在整数 使 ”,给出 并验证就够了。
一个失败例子不能推翻存在命题。试了 没有得到 ,只能说明 不是见证,不能说明别的整数也不行。要否定存在命题,必须证明论域中没有任何见证。
同样,算对一百个例子也不能证明全称命题。有限次试验可以发现模式、寻找反例、检查猜想,却不能自动覆盖无限论域。证明与实验的角色不同:实验帮助我们想,证明负责让“总是如此”成立。
练习:判断命题“对所有整数 ,若 是偶数,则 是偶数”是否为真。
证明既要正确,也要让人能顺着读。成稿不是一串孤立公式,而是一小篇有起点、有推进、有收尾的说明文。公式负责精确,句子负责告诉读者为什么这一步可以从上一步得到。
较长证明开头可以先说一句打算怎么做,例如“我们按 的奇偶性分类”或“展开整除定义后代入”。这句话不承担具体推理,却让读者提前知道证明的地图。
发现证明时的草稿可以很乱。你可以试数值、画图、从目标倒推,甚至走几条死路。成稿则要把有效主线按自然顺序重新排列。不要把所有尝试都塞进去,但应该保留那句真正解释关键转折的话,例如“目标需要因子 ,所以把已知偶数写成 ”。
下面这种写法计算上没有错,却让读者猜每一行的角色:
改成完整证明,只需要补上几句关键说明:
任取偶数 。由偶数定义,存在 使 。于是 。因为 ,由偶数定义, 是偶数。
文字没有重复公式,而是在标记“任取”“使用定义”“整数封闭”“回到结论”这几个逻辑关节。
突然出现的 、 或集合 会迫使读者回头猜。第一次使用时就说明范围和来源:“存在整数 ”“任取 ”“令 表示满足条件的元素集合”。符号确实能缩短证明,但每个新符号都会增加读者的记忆负担,能不用时不要硬加。
若一步真的简单,可以写出它依赖的事实:“因为整数对加法封闭,所以 。”这通常只多十几个字,却比“显然可得”更能帮助初学者判断推理是否完整。
一份清楚的证明通常有可见的路线、线性的推进、定义明确的符号和对准原命题的最后一句。写清楚也会帮助作者发现自己漏掉的条件。
验证 都是偶数,只说明这些例子成立。无论列出多少有限个例子,都没有处理“任意偶数”。例子适合找规律,不负责证明无限对象的全称结论。
要证明 是偶数,一开始写“设 ”就是循环论证。判断方法很直接:这句话如果已经等价于题目要证的结论,就不能在没有推导的情况下使用。
由 都是奇数,应该写 。若都写成 ,就无意中加入了 。存在性定义只保证各自有见证,不保证见证相同。
从 推出 需要 。从整除关系直接写商,也可能遇到除数为 。使用整数倍见证往往能避开这种隐藏条件。
等号两边必须是同一类数学对象且数值相等。不要写
“偶数”是性质,不是与 相等的数。应该写“,所以 是偶数”。
把所有整数分成正数和负数会漏掉 ;把集合分成“含 ”和“含 ”还可能漏掉两者都不含的集合。分类前先写出为什么每个对象必落入至少一个分支。
要推翻 ,必须找 真而 假的对象。只找到 假、却没有检查 ,是最常见的无效反例。
得到 后,还应说明 是整数,再由整除定义得 。不要把“读者应该能看出来”当作结束标记;收尾往往正是证明是否真正对准结论的地方。
做下面每题前,先写一句方法判断:它适合定义展开、直接证明、分类讨论,还是需要反例?先选路线,会比直接堆公式更快。
证明:若整数 是奇数,则 是奇数。
证明:对所有整数 ,若 ,则 。
证明:若整数 满足 是偶数,则 是偶数。
判断:对所有整数 ,若 是奇数,则 是奇数。
判断:若 ,则 。
判断:若 是单射,则 是单射。
证明:若 且 ,则 。
交出证明前,可以按下面的顺序快速对账:
直接证明的优势是路线短,读者能看到结论怎样从假设长出来,所以有直达路线时通常先选它。但有些命题从假设正面展开后没有抓手,例如“若 是偶数,则 是偶数”;还有些结论本身是否定形式,正面构造并不自然。
这不是证明卡死了,而是在提醒我们换一个逻辑方向。下一章会学习逆否证明和反证法:前者把“若 则 ”改写成等价的“若非 则非 ”,后者则暂时假设结论失败,再追踪它会造成什么矛盾。它们仍然会使用本章练过的定义展开、分类和整除代入,只是路线不再一直向前。
把定义式代入目标表达式并整理:
因为 ,所以 写成了 乘一个整数。由偶数定义, 是偶数。
因为 ,所以 是偶数。这里真正完成证明的是“ 是整数”与最后一句定义判断,而不只是代数等式。
用等式、已知定理或逻辑推理把起点连到目标形式。
说明新出现的对象满足所需范围,并明确写出“因此 成立”。
将定义式代入平方并整理成目标形式:
因为 ,所以 。因此 是 的整数倍,由偶数定义, 是偶数。
由 ,存在整数 ,使 ;由 ,存在整数 ,使 。
把 代入 :
因为 ,所以 。于是 是 的整数倍,即 。
因为 ,所以 。因此 。
括号内是整数,所以此时 是偶数。
若 是奇数,则存在 ,使 。于是
括号内仍是整数,所以此时 也是偶数。
两种情形覆盖了所有整数,而且每种情形都得到相同结论。因此对任意整数 , 是偶数。
所以 也是偶数。
若 是奇数,则 ,其中 ,于是
所以 也是奇数。两类覆盖所有整数,因此 与 的奇偶性相同。
再检查假设是否仍成立。很多“候选反例”会在这一步被淘汰。
优先试边界和结构突变的位置,例如 、空集、单元素集合、常值函数,以及正负号改变的地方。
成稿时逐项写清“在论域内—满足假设—破坏结论”,然后说明原全称命题为假。
是奇数。因此 是反例,原命题为假。
因为 ,所以 是奇数。
由 ,存在 ,使 。平方得
因为 ,所以 。
这个证明已经带有间接推理的味道。下一章会把它改写成更紧凑的逆否证明。
也就是
因为 是单射,所以 。由单射定义, 是单射。
注意这里不需要假设 是单射;我们只是在相等的两个值上应用同一个函数。
因为 ,所以 。