图书馆里的两个小时:逻辑证明与 Python 中间变量

阅读《Understanding Analysis》的逻辑证明部分,辨析直接证明、间接证明与逆否证明,并学习 Python 中间变量。

Read in English →

今天上午去了图书馆,学习时间大约两个小时。数学方面继续阅读《Understanding Analysis》中关于 logic and proofs 的内容,重点辨认直接证明(direct proof)、间接证明(indirect proof)和逆否证明(contrapositive proof)之间的关系;编程方面则跟着 Python 课程学习了中间变量。下午还有不少学校里的事情,所以今天的进度不算多。这篇记录主要是把上午接触到的内容重新梳理一遍。

图书馆书桌上的电脑、数学教材、键盘与手写批注
上午的学习现场:电脑上播放 Python 课程,手边同时放着《Understanding Analysis》。

从“命题是真的”到“为什么是真的”

这一章首先提醒我,证明不仅要得到正确结论,每一步还必须能够由前面的步骤或已经接受的事实推出,并且所有步骤要组织成连贯的论证。对初学者来说,困难往往不是记住某个证明方法的名字,而是分清一个命题的假设(hypothesis)与结论(conclusion),再判断推理应该从哪里开始。

直接证明从命题的假设出发,通过连续的逻辑推导抵达结论。它的路线比较正面:假设已经给了我什么,我能由此推出什么,最后是否正好得到要证明的内容。间接证明则先否定想要得到的结论,再尝试从这个否定出发推出矛盾。如果矛盾确实来自原来的假设、定义或已经成立的事实,就说明刚才对结论的否定不能成立。

逆否证明与间接证明看起来相近,但组织方式稍有不同。要证明“如果 P,那么 Q”,逆否证明改为证明“如果非 Q,那么非 P”。原命题与它的逆否命题在逻辑上等价,因此后者成立就足以说明原命题成立。反证法通常把原假设与“结论不成立”放在一起,最终导出不可能的结果;逆否证明则明确地把“非 Q”推向“非 P”。今天我只是初步分清了这几条路线,还需要通过更多命题练习,才能在没有提示时判断哪种方式更自然。

一个关于“任意 ε”的例子

书中的定理 1.2.6 说明:两个实数 a 与 b 相等,当且仅当对每一个实数 ε > 0,都有 |a − b| < ε。

“当且仅当”(if and only if)意味着需要证明两个方向。正向很直接:如果 a = b,那么 |a − b| = 0,而任意 ε 都大于 0,所以自然有 |a − b| < ε。

反向更值得注意。现在假设对每个 ε > 0 都有 |a − b| < ε,并希望推出 a = b。可以先反设 a ≠ b,于是 |a − b| > 0。此时取一个非常具体的数

ε₀ = |a − b|。

因为原条件对每一个正的 ε 都成立,它也必须对 ε₀ 成立,于是得到 |a − b| < |a − b|,这显然不可能。因此 a ≠ b 的反设不能成立,只能有 a = b。

这个例子让我注意到,“for every”并不是可以略过的修饰语。正因为条件覆盖所有正数,证明中才可以主动选择最能暴露矛盾的 ε₀。读分析学时,量词的范围会直接决定一个证明能够做什么。

Understanding Analysis 中关于直接证明、间接证明和定理 1.2.6 的批注
《Understanding Analysis》的证明方法与定理 1.2.6。今天的批注主要集中在 hypothesis、conclusion、if and only if 以及两个证明方向。

数学英语:词汇要放回证明结构里

今天也在 Kimi 的帮助下重新辨析了这些证明方法,并继续更新数学词汇本。除了 direct proof、indirect proof 和 contrapositive proof,我还复习了 proposition、forward direction、converse statement、contradiction 等词。

单独记住中文释义还不够。比如 hypothesis 在证明中表示已经允许使用的前提,conclusion 是最终需要到达的结论;forward direction 与 converse statement 则对应“当且仅当”命题的两个证明方向。把词汇放回具体句子和证明位置里,比只背一组中英文对应更容易形成稳定理解。

我也重新整理了一下英语输入的方法。播客可以在散步或运动时泛听,但如果想真正训练听力,仍需要留出一小段精听时间:先听一遍,再借助 transcript 核对,选择少量生词,随后重听、跟读并尝试自己概括。今天只是把方法写清楚,并不等于已经完成了一次完整训练。

屏幕上关于英语精听步骤与学习安排的文字记录
对英语输入方式的整理:泛听可以保留,但每天还需要一段更专注、可复述的精听。

Python:用中间变量拆开过程

Python 部分学习了中间变量。我的初步理解是:中间变量用来暂时保存某一步的计算结果,让后续代码可以继续使用它。它不一定让程序“做更多事情”,却能把一个较长的过程拆成几步,使每一步更容易阅读、检查和修改。

例如交换两个变量的值时,可以先暂存其中一个值:

temporary = a
a = b
b = temporary

这里的 temporary 就承担了过渡作用,避免原来的 a 在赋值后丢失。现在这个概念还停留在跟随课程和理解示例的阶段,之后仍需要自己重新写几段代码,观察中间值如何变化,而不是只记住写法。

今天的节奏

今天上午只学习了两个小时,下午又被学校里的事情占去不少时间。与其把“时间短”直接理解成效率低,不如更具体地记录:数学部分完成了证明方法的初步区分和一个定理的复述,Python 部分接触了中间变量,词汇本也有继续更新;但这些内容都还需要在下一次学习时主动回忆。

下一步我想先做两件小事:不看原文重新写一遍定理 1.2.6 的两个方向,并用自己的例子再练习一次 Python 中间变量。等到能独立写出来,再判断今天的内容是否真正留下来了。

写完时已经是 2026 年 8 月 30 日 23:10。今天先到这里,晚安。

评论

0 条