对自己的工作保持怀疑态度

Terence Tao 2007-05-06

对自己的工作保持怀疑态度

专家就是在非常狭窄的领域内犯过所有可能错误的人。 ——尼尔斯·玻尔

如果你意外地发现某个问题几乎毫不费力地自行解决了,而你却不太明白原因,你应该更加怀疑地分析你的解决方案。

特别是,该方法可能还能够证明一些已知为错误的更强陈述,这将意味着该方法存在缺陷。

本着类似的精神,如果你试图证明某个雄心勃勃的论断,你可以先尝试寻找反例;要么你找到一个反例,这会为你节省大量时间,并且很可能本身就值得发表,要么你遇到一些障碍,这应该能为你提供一些线索,告诉你需要做什么才能积极确立该论断(特别是,它可以”识别敌人”,即为了完成证明而必须克服的障碍)。

实际上,将这种怀疑态度应用于其他数学家的论断也不是个坏主意;至少,它们可以让你了解该论断为何成立以及它的威力有多大。

在处理已知困难的问题(这包括大多数”著名问题”)或超出你通常专业领域的问题时,尤其应该对自己的工作保持怀疑态度。特别是,如果你对该问题的解决方案类似于以下过程:

  1. 将困难问题转化为另一个困难问题。
  2. 再次将问题转化为另一个困难问题。
  3. 再次将问题转化为另一个困难问题。
  4. 再次转化问题。突然问题变得简单多了!
  5. 将简单问题转化为另一个简单问题。
  6. 再次将简单问题转化为另一个简单问题。
  7. 解决最后一个简单问题。完成!

那么你的论证在第5步几乎肯定存在重大错误。(如果在第1-4步中,转化后问题的难度一直在增加,这一点尤其正确。)至少,这个可疑的步骤应该被彻底检查和重新检查,该步骤附近的任何模糊论证都应该完整写出来,并且应该进行分析,以理解究竟是论证中的哪个决定性步骤戏剧性地简化了问题,以及该步骤如何能够如此强大地实现这种简化。

以下是另一种常见的可疑论证类型:

  1. 为了证明著名猜想X,使用反证法,并为了矛盾而假设X为假。
  2. 进行一些与X有间接关联的随机计算。
  3. 进行更多此类随机计算。
  4. 进行另一次随机计算,但这次无意中犯了符号错误、除以零或类似错误。
  5. 进行更多随机计算。
  6. 注意到你的两次计算相互矛盾。
  7. 恭喜——你得到了期望的矛盾。宣告胜利!

对这种错误论证进行压力测试的一个好方法是尝试使用X为假的初始假设来运行相同的论证。如果可以轻松修改论证再次导致矛盾,这表明问题不在于X——而在于论证本身。这里的一个经典例子是,一个”证明”声称方程 a^n + b^n = c^n 存在非平凡自然数解会导致矛盾,但这个证明神秘地没有以任何重要方式使用 n > 2 的假设,并且实际上(可能经过一些小的修改后)对于 n = 2 也适用。另一个好做法是,将你最初使用反证法找到的论证尝试解开,创建一个避免使用反证法的更直接的证明。如果论证本质上是相当”线性”的,这应该会产生一个更简单、更精简的论证(这无论如何都是重写过程的一部分),并且通常也能捕捉到上述第5步中的错误类型。

另一个警告信号是,如果计算引导你越来越远离X本应处理的数学主题和联系(例如,一个黎曼假设的拟议证明几乎完全使用亚纯函数理论进行,几乎没有涉及整数、素数或其他基本数论概念;或者相反,一个完全通过处理整数进行的论证,几乎没有涉及zeta函数)。

最后一个警告信号是,如果你的方法基于改编过去该领域许多专家频繁使用的方法,但添加了你自己的一些所有先前专家不知何故”错过”的额外技巧。在这种情况下,这个技巧很可能包含一个严重的技术缺陷,而先前的专家们已经意识到并避免了这种缺陷,在这种情况下尤其需要保持高度怀疑。

相比之下,对一个重大问题的实际解决方案往往是通过更类似于以下的过程达成的(通常涉及多位数学家经过数年或数十年的努力,这里描述的许多中间步骤本身就是重要的可发表论文):

  1. 分离出主要问题X的一个玩具模型案例x。
  2. 使用方法A解决模型案例x。
  3. 尝试使用方法A解决完整问题X。
  4. 这不成功,但方法A可以扩展以处理X的更多模型案例,如x’和x”。
  5. 最终,意识到方法A关键依赖于性质P为真;这个性质对于x、x’和x”是已知的,从而解释了目前的进展。
  6. 猜想性质P对于问题X的所有实例都成立。
  7. 发现该猜想的一系列反例y、y’、y”……这表明要么需要修改方法A以避免依赖P,要么需要新方法。
  8. 取该系列中最简单的反例y,尝试证明X在这个特殊情况下的成立。同时,尝试看看在缺乏P的情况下方法A是否可行。
  9. 发现方法A失败的几个反例,其中失败原因可以明确追溯到P。放弃修改方法A的努力。
  10. 意识到特殊情况y与数学另一个领域中的问题z相关(或至少类似)。查阅关于z的文献,并向该领域的专家请教对该问题的最新观点。
  11. 了解到z在该领域已通过使用方法B成功攻克。尝试调整方法B来解决y。
  12. 经过大量努力,开发出调整后的方法B’来解决y。
  13. 用B’替换A重复上述步骤1-12(当然,结果可能与上述示例情节略有不同)。继续这样做几年,直到所有模型特殊情况都可以通过某种方法解决。
  14. 最终,拥有一个方法阵列,可以对X给出部分结果,每种方法都有其优缺点。对于在何种情况下给定方法可能产生非平凡结果,获得了相当多的直觉。
  15. 开始将这些方法结合起来,简化这些方法的执行,定位新的模型问题,和/或找到一个统一且澄清的框架,在该框架中许多先前的方法、见解、结果等成为特例。
  16. 最终,意识到存在一个方法族A^(其中A是最早被发现的),粗略地说,可以处理所有出现性质P^(性质P的现代推广)的情况。还有一个相当不同的方法族B^*,可以处理所有出现Q^*的情况。
  17. 从之前关于这个问题的所有工作中,所有已知的模型例子都已知满足P^或Q^。提出猜想C:问题X的所有情况都满足P^或Q^
  18. 验证猜想C实际上蕴含该问题。这是一个重大的简化!
  19. 重复步骤1-18,但将问题X替换为猜想C。(同样,情节可能与上述不同。)这个过程本身可能会迭代几次。
  20. 最后,问题被提炼到最纯粹的本质:一个关键猜想K,它(至少在道德上)为已知方法A^*、B^*等提供了决定性输入,这些方法将解决猜想C从而解决问题X。
  21. 一个突破:引入新方法Z来解决K的一个重要特殊情况。
  22. 终局:利用所有直觉、经验和过去结果的全部力量,迅速发展和扩展方法Z,完全解决K,然后C,最后X。
  23. 为解决主要问题X而开发的技术被调整用于解决该领域中其他相关问题。但现在出现了一个X的自然后继问题X’,它刚好超出了新开发工具的范围……然后我们回到第1步。

另请参阅”了解你的工具的局限性”、“问自己愚蠢的问题”、“提前思考”和”使用废纸篓”。

Be sceptical of your own work

An expert is a man who has made all the mistakes, which can be made, in a very narrow field. — Niels Bohr

If you unexpectedly find a problem solving itself almost effortlessly, and you can’t quite see why, you should try to analyse your solution more sceptically.

In particular, the method may also be able to prove much stronger statements which are known to be false, which would imply that there is a flaw in the method.

In a related spirit, if you are trying to prove some ambitious claim, you might try to first look for a counterexample; either you find one, which saves you a lot of time and may well be publishable in its own right, or else you encounter some obstruction, which should give some clue as to what one has to do in order to establish the claim positively (in particular, it can “identify the enemy” that has to be neutralised in order to conclude the proof).

Actually, it’s not a bad idea to apply this type of scepticism to other mathematician’s claims also; if nothing else, they can give you a sense of why that claim is true and how powerful it is.

A sceptical attitude towards your own work should be especially enforced when dealing with a problem which is known to be difficult (and this includes most “famous problems”), or one which is outside your usual area of expertise. In particular, if your solution to that problem resembled this process:

  1. Transform the difficult problem to another difficult problem.
  2. Transform the problem again to yet another difficult problem.
  3. Transform the problem again to yet another difficult problem.
  4. Transform the problem again. Suddenly the problem becomes much simpler!
  5. Transform the simple problem to another simple problem.
  6. Transform the simple problem again to another simple problem.
  7. Solve the last simple problem. Done!

then there is almost certainly a major error in your argument in Step 5. (This is especially true if the difficulty of the transformed problem had been steadily increasing through steps 1-4.) At a bare minimum, this suspicious step should be thoroughly checked and rechecked, any hand-waving arguments near this step should be written out in full, and some analysis should be undertaken as to understanding what exactly was the decisive step in the argument that dramatically simplified the problem, and how that step could be so powerful as to achieve such a simplification.

Here is another common type of suspicious argument:

  1. To prove Famous Conjecture X, use reductio ad absurdum, and assume for sake of contradiction that X is false.
  2. Do some random computations of tangential relevance to X.
  3. Do some more random computations of this type.
  4. Do another random computation, but this time unwittingly make a sign error, division by zero, or similar mistake.
  5. Do yet more random computations.
  6. Notice that two of your computations are inconsistent with each other.
  7. Congratulations – you’ve obtained the desired contradiction. Declare victory!

A good way to stress-test this sort of false argument is to try to run the same argument without the initial assumption that X is false. If one can easily modify the argument to again lead to a contradiction, it shows the problem wasn’t with X – it was with the argument. A classic example here would be a “proof” that the existence of non-trivial natural number solutions to the equation a^n + b^n = c^n leads to a contradiction, which mysteriously fails to use in any significant way the hypothesis that n > 2 and would in fact would also work (perhaps after some small modification) for n = 2 also. Another good practice is to take an argument that you first found using reductio ad absurdum, and try to untangle it to create a more direct proof that avoids reductio ad absurdum. If the argument is fairly “linear” in nature, this should end up with a simpler and more streamlined argument (which is part of the rewriting process in any event), and can often also catch errors of the type in Step 5 above.

Another warning sign is if the computations lead you further and further away from the mathematical topics and connections that X is supposed to be addressing (e.g. a proposed proof of the Riemann hypothesis that proceeds almost entirely using the theory of meromorphic functions, with almost no reference to integers, primes, or other basic number-theoretic concepts; or, conversely, an argument that proceeds entirely by working with the integers, with barely any reference to the zeta function).

A final type of warning sign is if your approach is based on adapting a method that has been used frequently in the past by many experts in the field, but with an additional twist of your own that all the previous experts somehow “missed”. In such situations, there is a high probability that this twist contains a serious technical flaw that the previous experts were aware of and avoided, and a particularly high level of scepticism is warranted in such situations.

For comparison, actual solutions to a major problem tend to be arrived at by a process more like the following (often involving several mathematicians over a period of years or decades, with many of the intermediate steps described here being significant publishable papers in their own right):

  1. Isolate a toy model case x of major problem X.
  2. Solve model case x using method A.
  3. Try using method A to solve the full problem X.
  4. This does not succeed, but method A can be extended to handle a few more model cases of X, such as x’ and x”.
  5. Eventually, it is realised that method A relies crucially on a property P being true; this property is known for x, x’, and x”, thus explaining the current progress so far.
  6. Conjecture that P is true for all instances of problem X.
  7. Discover a family of counterexamples y, y’, y”, … to this conjecture. This shows that either method A has to be adapted to avoid reliance on P, or that a new method is needed.
  8. Take the simplest counterexample y in this family, and try to prove X for this special case. Meanwhile, try to see whether method A can work in the absence of P.
  9. Discover several counterexamples in which method A fails, in which the cause of failure can be definitively traced back to P. Abandon efforts to modify method A.
  10. Realise that special case y is related to (or at least analogous to) a problem z in another field of mathematics. Look up the literature on z, and ask experts in that field for the latest perspectives on that problem.
  11. Learn that z has been successfully attacked in that field by use of method B. Attempt to adapt method B to solve y.
  12. After much effort, an adapted method B’ is developed to solve y.
  13. Repeat the above steps 1-12 with A replaced by B’ (the outcome will of course probably be a little different from the sample storyline presented above). Continue doing this for a few years, until all model special cases can be solved by one method or another.
  14. Eventually, one possesses an array of methods that can give partial results on X, each of having their strengths and weaknesses. Considerable intuition is gained as to the circumstances in which a given method is likely to yield something non-trivial or not.
  15. Begin combining the methods together, simplifying the execution of these methods, locating new model problems, and/or finding a unified and clarifying framework in which many previous methods, insights, results, etc. become special cases.
  16. Eventually, one realises that there is a family of methods A^* (of which A was the first to be discovered) which, roughly speaking, can handle all cases in which property P^* (a modern generalisation of property P) occurs. There is also a rather different family of methods B^* which can handle all cases in which Q^* occurs.
  17. From all the prior work on this problem, all known model examples are known to obey either P^* or Q^. Formulate Conjecture C: all cases of problem X obey either P^ or Q^*.
  18. Verify that Conjecture C in fact implies the problem. This is a major reduction!
  19. Repeat steps 1-18, but with problem X replaced by Conjecture C. (Again, the storyline may be different from that presented above.) This procedure itself may iterate a few times.
  20. Finally, the problem has been boiled down to its most purified essence: a key conjecture K which (morally, at least) provides the decisive input into the known methods A^, B^, etc. which will settle conjecture C and hence problem X.
  21. A breakthrough: a new method Z is introduced to solve an important special case of K.
  22. The endgame: method Z is rapidly developed and extended, using the full power of all the intuition, experience, and past results, to fully settle K, then C, and then at last X.
  23. The technology developed to solve major problem X is adapted to solve other related problems in the field. But now a natural successor question X’ to X arises, which lies just outside of the reach of the newly developed tools… and we go back to Step 1.

See also “Learn the limitations of your tools”, “Ask yourself dumb questions”, “Think ahead”, and “Use the wastebasket”.