为何从一元五次方程开始就没有由有限次加、减、乘、除、开方运算构成的求根公式了?

【相关问题】能否通过列举一些代数式、方程加以分析、说明,直解释阿贝尔定理? - 数学大家都知道,一元一次、二次、三次、四次方程都有根式解,从五次方程开始就没有一般解了。然而这个情况为什么是五次方程开始出现?为什么这个数字是五?为什么不是六或者是七?为什么恰好是五次方程才开始没有根式解?难道说当多项式的次数达到五的时候,其形态会有根本性的改变?―――另外,就是现行初中数学教材关于一元二次方程的章节中…
关注者
2522
被浏览
285364

有一次 Dror Bar-Natan 来卡内基梅隆大学给本科生讲座,我导师居然去听了,并且他也推荐我去。从那次讲座以后,我终于可以绕开抽象代数理论(域扩张、Galois 理论等等),向一个仅接触过复数的路人解释 Abel–Ruffini 定理了,即「为何五次方程没有求根公式」。如果你会编程,那还可以额外享受自行验证部分证明的乐趣。要知道,对于一般的本科教学,经过一学期群环域的轮番折磨,学生才可能在学期末触及 Abel–Ruffini 定理这个巅峰。

插播一则轶事,Dror Bar-Natan 在加拿大入籍的时候,发现需要宣誓:

I affirm that I will be faithful and bear true allegiance to Her Majesty Queen Elizabeth II, Queen of Canada, Her Heirs and Successors, and that I will faithfully observe the laws of Canada and fulfill my duties as a Canadian citizen.

他表示很乐意遵守法律、履行加拿大公民义务……但是向女王或者她的子嗣效忠?老子不干!于是 2012 年他和小伙伴组队上加拿大最高法院讲理去了。很不幸 2015 年最高法院驳回了上诉。最后,他和小伙伴在宣誓加入加拿大籍后公开否认誓言的前半部分。有兴趣入加拿大籍但又不想效忠女王的朋友,请移步 disavowal.ca 查看详细步骤。

言归正传,首先要明确「当我们在谈论求根公式时我们在谈论什么」。例如,求根公式x=\tfrac{1}{2}\left(-a+\sqrt{a^2-4b}\right) 给出任何二次方程x^2+ax+b=0 的一个根。所以,五次方程求根公式(如果存在的话)应当

  1. 给出任何五次方程x^5+ax^4+bx^3+cx^2+dx+e=0 的一个根;
  2. 并且是一个关于 a, b, c, d, e 且仅含加减乘除开方的代数表达式。

对于特定类型的五次方程,如x^5-a^5=0,虽然有一个仅含加减乘除开方的解 x = a,但这并不是我们要谈论的求根公式。

接下来的 Abel–Ruffini 定理的证明是基于 Vladimir Arnold 在 1963 年的拓扑证明(开启了拓扑 Galois 理论)。其他回答中最接近的应该是韩京俊的解答,我的回答将牺牲一小部分严谨性来换取可读性。

这个证明需要一位假想敌(想象一位你最希望打脸的朋友),他或她宣称拥有五次方程求根公式 x = f(a, b, c, d, e)(随便写的复杂公式,不要在意细节):

x=f(a,b,c,d,e)=\frac{3}{\frac{-b^3}{27a^3}+\frac{bc}{6a^2}-\frac{d}{2a}+\frac{2}{\left(\frac{-c^3}{27b^3}+\frac{cd}{6b^2}-\frac{e}{2b}\right)^2+\left(\frac{d}{3b}-\frac{c^2}{9b^2}\right)^2}}

我们按照如下计划去推翻这个公式:

  1. 随意选取五个复数 x1, …, x5 并构造五次方程x^5+ax^4+bx^3+cx^2+dx+e=0 使得其根恰是 x1, …, x5
  2. 将五次方程的系数 a, b, c, d, e 代入假想敌提供的公式中算出 x = f(a, b, c, d, e) 并展示 x 不在 x1, …, x5 中。

计划的第一步,在选定 x1, …, x5 后,可以通过展开 (x - x1)(x - x2)(x - x3)(x - x4)(x - x5) = 0得到想要的五次方程的系数,例如:a = - (x1 + x2 + x3 + x4 + x5), …, e = - x1 x2 x3 x4 x5。具体的系数与根之间的关系就是大家初中学的 Vieta 公式(韦达定理)。计划的第二步只需要机械式地代入计算 x 并比对 x1, …, x5 即可。

然而,这个计划并不一劳永逸——每次假想敌宣称有新的五次方程求根公式,我们都需要重新执行上面描述的计划去推翻。

升级版计划是让 x1, …, x5 动起来!想象如下运动:同时地,x1x2 移动,x2x3 移动,x3x4 移动,x4x5 移动。在运动的同时,我们

  1. 不断用 Vieta 公式计算系数 a, b, c, d, e 的值,
  2. 再不断代入 f(a, b, c, d, e) 计算 x 的值。

为方便起见,我们用数组 P = (2, 3, 4, 5, 1) 来表示所描述的运动,一般地,数组从左到右依次记录了 x1, …, x5 运动终点 x 的下标。这样让 x1, …, x5 交换位置的运动,我们称为置换 Permutation

因为整个运动只是将 x1, …, x5 换了换位置且 Vieta 公式关于 x1, …, x5 都是对称的,所以在运动后,a, b, c, d, e 都回到了起始的位置。示意图如下:

由于 f 在运动前后都代入了同样的 a, b, c, d, e,于是 x = f(a, b, c, d, e) 应当回到它起始的位置!慢着,如果 x 在运动开始前是 x1, …, x5 中的某个,不妨设是 x1,那么在连续运动的过程中 x 应该一直和 x1 保持一致,并在运动后落在原本 x2 的位置上。打脸成功!

细心的读者会反问:上面的证明压根没用到 5 次方程这个条件,那岂不是可以证明任何方程都没有求根公式了?我们读的一定是假的证明……

确实,以上论证存在缺陷——在计算 x = f(a, b, c, d, e) 的时候,忽视了公式含有开方的可能。

为了说明这个缺陷,我们将以上的论证应用在 2 次方程x^2+ax+b=0 和求根公式x=\tfrac{1}{2}\left(-a+\sqrt{a^2-4b}\right) 上。第一步,Vieta 公式告诉我们 a = - (x1 + x2), b = x1 x2;第二步中,先代入\Delta = a^2-4b=(x_1+x_2)^2-4x_1x_2=(x_1-x_2)^2 ,再开根得到 x1 - x2x2 - x1。想象将 x1x2 互换的运动,虽然 Δ 会回到起始的位置,但是 √Δ 为了保证运动的连续性必须盯住 x1 - x2 或盯住 x2 - x1,于是在 x1x2 互换后 √Δ 变成了自己的相反数。换个角度看,当 x1x2 互换时,Δ 绕原点转了 1 圈,于是 √Δ 只绕了 1 / 2 圈。

一般情况下,当复数 z 绕原点 k1 圈回到起始位置时,zk 次根只绕了 k1 / k 圈。

因此,回到 5 次方程的情况,如果 f(a, b, c, d, e)包含开方,那么升级版计划就不能保证 x 还能回到起始位置。当然,升级版计划是可以说明不出现开方的公式(例如那个复杂的随便写的公式)一定不是求根公式。这从一个侧面回答了「为何二至四次方程的求根公式里面必须出现开方」。

终极版计划将延续升级版的思路:合理制定 x1, …, x5 的移动路径,使得

  1. x1 不回到自己原来的位置;
  2. 系数 a, b, c, d, e 在某种意义上绕原点圈数(以下简称绕数 winding number)为 0。

为此,我们需要引入置换的复合 Composition 逆 Inverse 交换子 Commutator 三个概念。

两个置换的复合,就是将两个置换运动的录像连着播放:

置换的逆,就是把一个置换运动的录像倒着播放:

两个置换 P1, P2 的交换子定义为[P_1, P_2] := P_1 \cdot P_2\cdot P_1^{-1} \cdot P_2^{-1}。可以把交换子 [ P1, P2 ] 分解为如下 4 个过程:

  1. 先播放置换运动 P1 的录像;
  2. 连着播放置换运动 P2 的录像;
  3. 再倒放置换运动 P1 的录像;
  4. 最后倒放置换运动 P2 的录像。

如果假想敌宣称求根公式是x = \sqrt[3]{A} + \sqrt[3]{B} ,其中 A, Ba, b, c, d, e 的只含加减乘除的代数式。考虑在置换 P = [ P1, P2 ] 的作用下 A 的运动:在过程 1, 2 中假设 A 的绕数分别是 k1, k2,则在过程 3, 4 中倒放录像 A 的绕数分别是 -k1, -k2,于是 A 总绕数为 0,故\sqrt[3]{A} 回到起始位置。同理,\sqrt[3]{B} 也回到起始位置。综上,x 将回到起始位置。

如果假想敌宣称求根公式是x=\sqrt[3]{A+\sqrt{B}}+\sqrt[3]{C+\sqrt{D}} ,其中 A, B, C, D a, b, c, d, e 的只含加减乘除的代数式。令 P = [ P1, P2 ], P1 = [ P3, P4 ], P2 = [ P5, P6 ],也就是说 P = [ [ P3, P4 ], [ P5, P6 ] ]。因为 P1 = [ P3, P4 ] 是交换子,我们知道\sqrt{B}P1 作用下回到起始位置,于是A+\sqrt{B}P1 作用下回到起始位置;同理A+\sqrt{B}P2 作用下也回到起始位置。由于 P = [ P1, P2 ] 是交换子,故\sqrt[3]{A+\sqrt{B}}P 的作用下回到起始位置。以此类推,可得 x 将回到起始位置。

可以看出交换子的交换子可以处理两层开方的情形。一般地,交换子的交换子的……的交换子(默念 m 遍交换子)可以处理有 m 层开方的情形。

为了满足「根 x1 不回到自己原来的位置」这个条件,剩下的任务就是找到一个既移动 x1 又能表示成「交换子的交换子的……的交换子」的置换。记所有置换构成的集合为 S5,又记所有交换子,即 [ P1, P2 ](其中 P1, P2 来自 S5),构成的集合为 A5。下面的 Ruby 程序将计算 A5 和交换子的交换子构成的集合。

require 'set'

def compose(p1, p2)
  (1..5).map { |i| p2[p1[i - 1] - 1] }
end

def invert(p)
  (1..5).map { |i| p.index(i) + 1 }
end

def commutate(p1, p2)
  compose(compose(compose(p1, p2), invert(p1)), invert(p2))
end

s5 = Set.new (1..5).to_a.permutation.to_a
puts "#{s5.length} permutations: #{s5.inspect}"

a5 = Set.new
for p1 in s5
  for p2 in s5
    a5 << commutate(p1, p2)
  end
end
puts "#{a5.length} commutators: #{a5.inspect}"

commutators_of_a5 = Set.new
for p1 in a5
  for p2 in a5
    commutators_of_a5 << commutate(p1, p2)
  end
end
puts "#{commutators_of_a5.length} commutators of commutators: #{commutators_of_a5.inspect}"

输出:

120 permutations: #<Set: {[1, 2, 3, 4, 5], [1, 2, 3, 5, 4], [1, 2, 4, 3, 5], [1, 2, 4, 5, 3], [1, 2, 5, 3, 4], [1, 2, 5, 4, 3], [1, 3, 2, 4, 5], [1, 3, 2, 5, 4], [1, 3, 4, 2, 5], [1, 3, 4, 5, 2], [1, 3, 5, 2, 4], [1, 3, 5, 4, 2], [1, 4, 2, 3, 5], [1, 4, 2, 5, 3], [1, 4, 3, 2, 5], [1, 4, 3, 5, 2], [1, 4, 5, 2, 3], [1, 4, 5, 3, 2], [1, 5, 2, 3, 4], [1, 5, 2, 4, 3], [1, 5, 3, 2, 4], [1, 5, 3, 4, 2], [1, 5, 4, 2, 3], [1, 5, 4, 3, 2], [2, 1, 3, 4, 5], [2, 1, 3, 5, 4], [2, 1, 4, 3, 5], [2, 1, 4, 5, 3], [2, 1, 5, 3, 4], [2, 1, 5, 4, 3], [2, 3, 1, 4, 5], [2, 3, 1, 5, 4], [2, 3, 4, 1, 5], [2, 3, 4, 5, 1], [2, 3, 5, 1, 4], [2, 3, 5, 4, 1], [2, 4, 1, 3, 5], [2, 4, 1, 5, 3], [2, 4, 3, 1, 5], [2, 4, 3, 5, 1], [2, 4, 5, 1, 3], [2, 4, 5, 3, 1], [2, 5, 1, 3, 4], [2, 5, 1, 4, 3], [2, 5, 3, 1, 4], [2, 5, 3, 4, 1], [2, 5, 4, 1, 3], [2, 5, 4, 3, 1], [3, 1, 2, 4, 5], [3, 1, 2, 5, 4], [3, 1, 4, 2, 5], [3, 1, 4, 5, 2], [3, 1, 5, 2, 4], [3, 1, 5, 4, 2], [3, 2, 1, 4, 5], [3, 2, 1, 5, 4], [3, 2, 4, 1, 5], [3, 2, 4, 5, 1], [3, 2, 5, 1, 4], [3, 2, 5, 4, 1], [3, 4, 1, 2, 5], [3, 4, 1, 5, 2], [3, 4, 2, 1, 5], [3, 4, 2, 5, 1], [3, 4, 5, 1, 2], [3, 4, 5, 2, 1], [3, 5, 1, 2, 4], [3, 5, 1, 4, 2], [3, 5, 2, 1, 4], [3, 5, 2, 4, 1], [3, 5, 4, 1, 2], [3, 5, 4, 2, 1], [4, 1, 2, 3, 5], [4, 1, 2, 5, 3], [4, 1, 3, 2, 5], [4, 1, 3, 5, 2], [4, 1, 5, 2, 3], [4, 1, 5, 3, 2], [4, 2, 1, 3, 5], [4, 2, 1, 5, 3], [4, 2, 3, 1, 5], [4, 2, 3, 5, 1], [4, 2, 5, 1, 3], [4, 2, 5, 3, 1], [4, 3, 1, 2, 5], [4, 3, 1, 5, 2], [4, 3, 2, 1, 5], [4, 3, 2, 5, 1], [4, 3, 5, 1, 2], [4, 3, 5, 2, 1], [4, 5, 1, 2, 3], [4, 5, 1, 3, 2], [4, 5, 2, 1, 3], [4, 5, 2, 3, 1], [4, 5, 3, 1, 2], [4, 5, 3, 2, 1], [5, 1, 2, 3, 4], [5, 1, 2, 4, 3], [5, 1, 3, 2, 4], [5, 1, 3, 4, 2], [5, 1, 4, 2, 3], [5, 1, 4, 3, 2], [5, 2, 1, 3, 4], [5, 2, 1, 4, 3], [5, 2, 3, 1, 4], [5, 2, 3, 4, 1], [5, 2, 4, 1, 3], [5, 2, 4, 3, 1], [5, 3, 1, 2, 4], [5, 3, 1, 4, 2], [5, 3, 2, 1, 4], [5, 3, 2, 4, 1], [5, 3, 4, 1, 2], [5, 3, 4, 2, 1], [5, 4, 1, 2, 3], [5, 4, 1, 3, 2], [5, 4, 2, 1, 3], [5, 4, 2, 3, 1], [5, 4, 3, 1, 2], [5, 4, 3, 2, 1]}>
60 commutators: #<Set: {[1, 2, 3, 4, 5], [1, 2, 5, 3, 4], [1, 2, 4, 5, 3], [1, 5, 3, 2, 4], [1, 4, 3, 5, 2], [1, 3, 2, 5, 4], [5, 2, 3, 1, 4], [4, 2, 3, 5, 1], [3, 2, 1, 5, 4], [2, 1, 3, 5, 4], [1, 4, 2, 3, 5], [1, 5, 4, 3, 2], [1, 3, 4, 2, 5], [4, 2, 1, 3, 5], [5, 2, 4, 3, 1], [3, 2, 4, 1, 5], [2, 1, 4, 3, 5], [1, 5, 2, 4, 3], [1, 4, 5, 2, 3], [5, 2, 1, 4, 3], [4, 2, 5, 1, 3], [5, 1, 4, 2, 3], [4, 1, 2, 5, 3], [3, 1, 4, 5, 2], [2, 5, 4, 1, 3], [2, 4, 1, 5, 3], [2, 3, 4, 5, 1], [1, 3, 5, 4, 2], [3, 2, 5, 4, 1], [2, 5, 1, 3, 4], [2, 4, 5, 3, 1], [2, 3, 5, 1, 4], [5, 1, 2, 3, 4], [4, 1, 5, 3, 2], [3, 1, 5, 2, 4], [2, 1, 5, 4, 3], [3, 1, 2, 4, 5], [4, 3, 2, 1, 5], [5, 3, 2, 4, 1], [2, 3, 1, 4, 5], [4, 5, 2, 3, 1], [5, 4, 2, 1, 3], [4, 3, 5, 2, 1], [5, 3, 4, 1, 2], [4, 1, 3, 2, 5], [3, 4, 1, 2, 5], [3, 5, 4, 2, 1], [5, 3, 1, 2, 4], [5, 1, 3, 4, 2], [5, 4, 1, 3, 2], [4, 5, 3, 1, 2], [3, 5, 1, 4, 2], [3, 4, 5, 1, 2], [3, 4, 2, 5, 1], [5, 4, 3, 2, 1], [4, 5, 1, 2, 3], [3, 5, 2, 1, 4], [4, 3, 1, 5, 2], [2, 4, 3, 1, 5], [2, 5, 3, 4, 1]}>
60 commutators of commutators: #<Set: {[1, 2, 3, 4, 5], [1, 3, 2, 5, 4], [1, 4, 5, 2, 3], [1, 5, 4, 3, 2], [3, 2, 1, 5, 4], [4, 2, 5, 1, 3], [5, 2, 4, 3, 1], [1, 2, 4, 5, 3], [5, 2, 3, 1, 4], [4, 2, 1, 3, 5], [3, 2, 5, 4, 1], [1, 5, 3, 2, 4], [1, 4, 2, 3, 5], [1, 3, 5, 4, 2], [5, 1, 2, 3, 4], [2, 4, 5, 3, 1], [3, 1, 5, 2, 4], [2, 3, 5, 1, 4], [2, 5, 1, 3, 4], [4, 1, 5, 3, 2], [1, 2, 5, 3, 4], [3, 2, 4, 1, 5], [5, 2, 1, 4, 3], [4, 2, 3, 5, 1], [1, 3, 4, 2, 5], [1, 5, 2, 4, 3], [1, 4, 3, 5, 2], [2, 5, 4, 1, 3], [4, 1, 2, 5, 3], [2, 3, 4, 5, 1], [3, 1, 4, 5, 2], [5, 1, 4, 2, 3], [2, 4, 1, 5, 3], [2, 1, 3, 5, 4], [4, 5, 3, 1, 2], [5, 4, 3, 2, 1], [2, 5, 3, 4, 1], [3, 5, 2, 1, 4], [4, 5, 1, 2, 3], [3, 5, 4, 2, 1], [5, 3, 1, 2, 4], [4, 1, 3, 2, 5], [2, 4, 3, 1, 5], [3, 4, 2, 5, 1], [5, 4, 1, 3, 2], [4, 3, 1, 5, 2], [3, 4, 5, 1, 2], [5, 1, 3, 4, 2], [2, 3, 1, 4, 5], [3, 1, 2, 4, 5], [5, 3, 4, 1, 2], [4, 5, 2, 3, 1], [4, 3, 5, 2, 1], [5, 4, 2, 1, 3], [2, 1, 4, 3, 5], [3, 4, 1, 2, 5], [4, 3, 2, 1, 5], [2, 1, 5, 4, 3], [3, 5, 1, 4, 2], [5, 3, 2, 4, 1]}>

我们发现,交换子的交换子构成的集合与 A5 一模一样!也就是说,任取一个 A5 中的元素 P,比如说 P = (3, 2, 1, 5, 4) 将 x1 移动至 x3,都可以在 A5 中找到 P1, P2 使得 P = [ P1, P2 ],于是又能在 A5 中找到 P3, P4, P5, P6 使得 P1 = [ P3, P4 ], P2 = [ P5, P6 ],以此类推,子子孙孙无穷匮也,这样就完成了最终的任务。

附产品 1:考虑 1, 2, 3 间所有的置换、它们的交换子以及交换子的交换子,类似的程序输出

6 permutations: #<Set: {[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]}>
3 commutators: #<Set: {[1, 2, 3], [3, 1, 2], [2, 3, 1]}>
1 commutators of commutators: #<Set: {[1, 2, 3]}>

这说明三次方程求根公式一层开方是不够的,至少需要两层开方。

附产品 2:考虑 1, 2, 3, 4 间所有的置换、它们的交换子、交换子的交换子、交换子的交换子的交换子,类似的程序输出

24 permutations: #<Set: {[1, 2, 3, 4], [1, 2, 4, 3], [1, 3, 2, 4], [1, 3, 4, 2], [1, 4, 2, 3], [1, 4, 3, 2], [2, 1, 3, 4], [2, 1, 4, 3], [2, 3, 1, 4], [2, 3, 4, 1], [2, 4, 1, 3], [2, 4, 3, 1], [3, 1, 2, 4], [3, 1, 4, 2], [3, 2, 1, 4], [3, 2, 4, 1], [3, 4, 1, 2], [3, 4, 2, 1], [4, 1, 2, 3], [4, 1, 3, 2], [4, 2, 1, 3], [4, 2, 3, 1], [4, 3, 1, 2], [4, 3, 2, 1]}>
12 commutators: #<Set: {[1, 2, 3, 4], [1, 4, 2, 3], [1, 3, 4, 2], [4, 2, 1, 3], [3, 2, 4, 1], [2, 1, 4, 3], [3, 1, 2, 4], [4, 3, 2, 1], [2, 3, 1, 4], [4, 1, 3, 2], [3, 4, 1, 2], [2, 4, 3, 1]}>
4 commutators of commutators: #<Set: {[1, 2, 3, 4], [2, 1, 4, 3], [3, 4, 1, 2], [4, 3, 2, 1]}>
1 commutators of commutators of commutators: #<Set: {[1, 2, 3, 4]}>

这说明四次方程求根公式两层开方是不够的,至少需要三层开方。

最后,致修炼数学的读者,抽象代数还是要好好学的。