前面几章已经给出了逻辑、量词、集合、关系和函数的语言。从这一章开始,我们把这些语言真正写成证明。证明不是把几个例子算对,也不是把想法写得像结论,而是从定义和假设出发,一步一步推出题目要求的语句。
本章先练三种最常用的动作:直接证明、分类讨论和构造反例。它们看起来朴素,却会决定后面学习逆否证明、反证法、归纳法和图论证明时能不能写清楚。

读一个命题时,先不要急着计算。先找清楚论域、量词、假设和结论,再把关键词换成定义。证明的开头通常就藏在这些信息里。
证明写作的第一步常常很小:把题目中的词换成可操作的式子。词语还停留在“偶数”“整除”“函数”“子集”时,我们很难继续推理;定义展开以后,推理才有抓手。
例如,在整数范围内:
这些定义都有两种用法。若题目已知 是偶数,你可以写“设 ,其中 为整数”。若题目要求证明某个数是偶数,你的目标通常是把它整理成 乘以某个整数。

写“”时,必须说明 是整数。偶数的定义不是“能写成 乘以某个东西”,而是“能写成 乘以某个整数”。
看一个很短的定义展开证明。
命题:若 和 都是奇数,则 是偶数。
任取两个整数 ,并假设它们都是奇数。这个开头对应命题中的“若 和 都是奇数”。
由奇数定义,存在整数 ,使得 且 。
这里没有用到神秘技巧。关键只是把“奇数”和“偶数”都换成定义,然后检查括号里的数仍然是整数。
练习:证明若 是偶数,则 是偶数。
设 是偶数。由偶数定义,存在整数 ,使得 。于是
直接证明适合处理形如“若 ,则 ”的命题。它的基本路线是:假设 成立,使用定义和已知事实,最后推出 。
若命题带有全称量词,例如
证明时不能只检查 、、。正确的开头是“任取整数 ”,然后在不指定 的具体值时完成推理。这样得到的结论才覆盖所有可能的 。

命题:若 是偶数,则 是偶数。
任取整数 ,并假设 是偶数。这里的“任取”表示接下来的论证不能依赖某个特殊数值。
由偶数定义,存在整数 ,使得 。
直接证明常见的难点不在计算,而在结尾。结尾要回到题目要求的定义。例如这里不能只停在 ,还要明确写成 ,说明它符合偶数定义。
下面这个交互把直接证明拆成步骤卡片。你可以先拼顺序,再看每一步在证明中承担什么角色。
再看一个整除命题。
命题:若 且 ,则 。
任取整数 ,并假设 且 。
直接证明的检查问题很固定:我是否任取了对象?是否只使用了假设和定义?最后一句是否真正回到了要证明的结论?
分类讨论用于一个统一证明不好直接写、但对象可以被自然分成几类的情况。分类本身不是装饰,它必须满足两个条件:所有对象都被覆盖,且每个分支的结论都能回到同一个目标。
整数的奇偶性是最常见的分类。每个整数要么是偶数,要么是奇数,没有第三种情况。这使得“按奇偶分类”可以覆盖所有整数。
命题:对任意整数 , 是偶数。

任取整数 。按奇偶性分类, 只能是偶数或奇数。
若 是偶数,则存在整数 ,使得 。于是
分类讨论的最后一句很重要。它告诉读者:分支已经检查完,且没有遗漏对象。
分类讨论最容易出错的地方是分类不全。例如只讨论“正数”和“负数”,却忘了 。如果题目的论域包括 ,这个证明就没有覆盖所有对象。
下面的实验台把分类讨论和反例搜索放在一起。先切换奇偶分支,观察同一个结论如何在不同情形下被推出;再输入整数,判断一个候选是否真的构成反例。
练习:证明对任意整数 , 与 有相同的奇偶性。
任取整数 。若 是偶数,则 ,于是 ,所以 是偶数。若 是奇数,则 ,于是
整除命题常常看起来像符号游戏,其实核心仍然是定义展开。已知 ,就把它改写成 ;已知 ,就把它改写成 。然后通过代入把链条接起来。

命题:若 且 ,则 。
任取整数 ,并假设 且 。
在这类证明中,“整数封闭”经常被用到。若 是整数,那么 、、 仍是整数。这个事实让我们能把括号里的表达式继续当作定义中的“某个整数”。
练习:证明若 ,则 。
设 。由整除定义,存在整数 ,使得 。于是
证明用来说明一个命题为真,反例用来说明一个命题为假。对全称命题来说,一个反例就够了。
如果命题是
那么反例是论域 中的一个对象 ,使得 为假。
如果命题是
那么反例必须让 为真,同时让 为假。只让结论假还不够;若前件本来就是假,这个对象不能推翻条件命题。

命题:对所有整数 ,若 ,则 。
这个命题为假。取 ,。它们是整数,并且 成立;但是
所以 不成立。于是 是反例。
反例不是“随便找一个不满足结论的对象”。对于条件命题,反例必须同时满足假设并破坏结论。否则它只是一个无关对象。
构造反例可以按下面的顺序做。
先确认论域。题目说的是整数、自然数、实数还是集合?论域不同,反例可能完全不同。
再让结论尽量失败。若结论是“大于”,就试着让它相等或小于;若结论是“为偶数”,就试着让它变成奇数。
接着检查假设是否真的成立。条件命题的反例必须让前件为真。
最后用一句话说明:这个对象在论域内,满足假设,但不满足结论,所以原命题为假。
练习:判断命题“对所有整数 ,若 是偶数,则 是偶数”是否为真。若为假,给出反例。
命题为假。取 。它是偶数,但
而 不是偶数。因此 是反例。
证明写错时,通常不是因为公式太难,而是因为逻辑位置写乱了。下面这些错误在初学证明时很常见。
为了证明“所有偶数的平方都是偶数”,只写 、、 不能成立。例子可以帮助猜想,但不能覆盖无限多个整数。
若要证明 是偶数,不能一开始就写“因为 ”。这正是结论本身。正确做法是从 是偶数出发,设 ,再推出 。
证明中出现 时,要说明它们是整数。整除和奇偶性的定义都依赖“整数”这个范围。若范围缺失,证明就少了一块地基。
如果题目讨论所有整数,按“正整数”和“负整数”分类会漏掉 。按“偶数”和“奇数”分类则覆盖所有整数。
要推翻“若 ,则 ”,不能取 。虽然 为假,但 也是假;这个对象没有进入命题真正讨论的情形。
写完一个短证明后,可以用三句话检查:我从题目的假设开始了吗?我每次改写都有定义或代数依据吗?最后一句准确回答了题目要证明什么吗?
综合练习:证明或给出反例。
第 1 题为真。设 ,则
把两个表达式相加,得到
因为 是整数,所以 写成了 乘以一个整数。按偶数定义, 是偶数。
因为 是整数,所以 是偶数。
平方并整理:
因为 是整数,所以 写成了 乘以一个整数。由偶数定义, 是偶数。
由整除定义,存在整数 ,使得 且 。
把两个等式相加:
因为 是整数,所以 是 乘以一个整数。由整除定义,。
因为 是整数,所以这一情形下 是偶数。
若 是奇数,则存在整数 ,使得 。于是
因为 是整数,所以这一情形下 是偶数。
两种情形覆盖了所有整数,并且都推出 是偶数。因此对任意整数 , 是偶数。
所以 是奇数。两类覆盖所有整数,因此 与 有相同的奇偶性。
由 ,存在整数 ,使得 。由 ,存在整数 ,使得 。
把 代入 ,得到
因为 和 都是整数,所以 是整数。因此 写成了 乘以一个整数,按整除定义,。
因为 和 都是整数,所以 是整数。因此 。
所以 是奇数。
第 2 题为真。若 ,则 ,其中 为整数。于是 ,所以 。
第 3 题为真,但用直接证明不太顺手。本章可以先按奇偶分类:若 是奇数,则 是奇数;因此 为偶数时, 不能是奇数,只能是偶数。
第 4 题为假。取 ,它是奇数,但 是偶数,所以不是奇数。