当我在重构的时候, 我在重构什么?
语言的严谨和朴素看起来是一对矛盾
最近学algebraic geometry, 我又面临那个重构问题了. 在试图定义structure sheaf的时候, Vakil书里给出的是构造方法是先定义sheaf on the base, 然后利用compatible germs把它变成一个sheaf. Hartshorne的方法是直接定义为满足某种条件的函数. 这两种方法在我当时看来, 都不是很直观. 然后我发现, compatible germs也好, section也好, 实际上都可以用etale space来理解. 所以我直接引入了etale space和local section的概念, 最后定义出来structure sheaf.
可是, 这样操作的定义, 虽然让我更好接受, 却没有带来任何新的理解. 反而让我更迷茫了. 昨天在算functions on the distinguished base的时候, 书上说就是\(A\)在\(f\)的localization. 可是从我的etale space角度去想, 我怎么也没法自然而然地推出这个结论. 然后我就和ChatGPT去聊, 他说Grothendieck的covering family也许是更接近本质的一种描述. 我就打算彻底重构我之前写的东西.
但我实际上是很不爽的. 重构这种个事情似乎在我的各种学习、实践中反复的出现过好多次. 这太影响效率, 而且一旦有一点不好嵌入我当前的体系的内容, 我就想放弃所有东西, 去找一条新的路. 这到底是为什么?
我觉得重点在于理清本质和实现. 实际上etale space也好, covering family也好, 都是不同的数学家在把他们脑海中的 compatibility 变成公理化的数学符号, 只是他们的侧重点不同. Etale space真的比直接定义compatible germs更接近本质吗? 其实未必, 只是因为topological space和section的语言我更熟悉, 所以我接受起来会更快一些, 觉得这个东西我可以理解. 但是其topology和local homeomorphism并没有让事情简单多少, 反而让我以为这就是本质. 当我发现这种理解行不通的时候, 我实际上是忽略了这个定义的出现, 是当时数学家的取舍的结果, 这个定义并不是他们脑中的compatiblity, 只是这是能用人话说出来的, 可能能方便计算的一个实现罢了.
作为抽象的本质也许是不可言说的. 就像人们为了刻画连续性, 要定义open sets; 为了定义极限, 要用\(\epsilon\)-\(\delta\)语言来描述一样. 本质上是一种妥协, 只是有的妥协方便计算而已.
道不可言, 言而非也.
在这个角度上, 人们也许是可悲的. 语言的限制, 使得我们必须要在严谨性和直观性上做出取舍. 日常语言中的极限, 是非常非常非常非常接近; 但是数学的语言, 就变成了对于任意\(\varepsilon > 0\), 存在\(\delta > 0\), 使得\(\lvert f(x) - f(x_0) \rvert < \varepsilon\) 对于任意的\(\lvert x - x_0 \rvert < \delta\).
所以当我们在学数学的时候, 我们要学的可能是两个事情: 首先, 严谨性的背后是怎样的直觉? 其次, 直觉是怎么被这种语言描述出来的? 这样的话, 就不需要反复重构我们的语言, 而是完善我们的直觉, 丰富我们的语言.
用编程上的话来讲, 可能是我要保证abstract class的稳定, 反复优化我的implementations. 这样, 重构就不是一个麻烦事了.
这是不是也是人类在做知识蒸馏呢?
语言是唯心的, 规律是唯物的, 当人试图用唯心的东西去描述唯物的东西的时候, 可能就注定要出错了.