从一个洗澡时的想法到美丽的 Collatz 可视化

最近我和妻子、女儿一起进行了一次愉快的 SCUBA 潜水旅行。大量的潜水意味着大量的淋浴,而大量的淋浴意味着大量的“洗澡时的想法”![1] 其中一个特别有趣的启发,让我找到了一种很好的方式来可视化 Collatz 猜想的某些方面。

Collatz 猜想在一个正整数集合上定义了一个非常简单的函数,如下所示:

如果你能证明,从任何正整数开始,重复应用这个函数,最终都会达到 1,那么你就证明了 Collatz 猜想,赢得一百万美元以及无数的声誉和荣耀![2]

验证单个输入非常简单。 例如,如果我们从 6 开始,我们会得到:

但真正的工作是证明这对于_所有_正整数都成立。 到目前为止,还没有人能够做到。

我不会解决 Collatz 猜想。 今年我不知何故要满 50 岁了,而且我的博士学位是在二十多年前获得的(并且是在一个不太可能影响该猜想的数学分支中)。 但我喜欢它就在那里,等待并激励着人们。 我希望在我有生之年看到它得到解决。

无论如何,我洗澡时的想法是,如果可以同时可视化多个正整数的 Collatz 函数的重复应用,而不是一次只可视化一个,那就太好了。 为了做到这一点,我想,为什么不跟踪每个输入的已采取分支的序列,然后因为只有两个分支,为什么不将它们视为二进制数字?![3] 我们可以使用这些二进制数字序列来生成每个输入的分数,方法是对序列中的每个位 b n 求和 2 -nbn,从而更容易绘制它们,并且可能更容易看到 Collatz 过程正在做什么。

经过一番思考,我意识到这种方法有点过于天真了。 Collatz 函数在每个步骤的输出似乎会偏向于产生偶数,使得位序列中一个二进制数字比另一个二进制数字更多,并且可能会模糊我们原本可以看到的任何有趣的特征。 我决定通过在 3n + 1 步骤结束时_立即_除以 2 来解决这个问题(因为我们知道如果 n 是奇数,则 3n + 1 将是偶数)。 事实证明,这个想法广为人知,被称为“快捷方式” Collatz 函数。

有了这个调整,这是一个简单的 JavaScript 实现:

function collatzBits(n) { // Generate a sequence of bits recording the branches taken by the Collatz process
  let bits = [];
  while (n !== 1) {
    if (n % 2 === 0) {
      bits.push(1);
      n = n / 2;
    } else {
      bits.push(0);
      n = (3 * n + 1) / 2;
    }
  }
  return bits;
}
function bitsToFraction(bits) { // Convert a sequence of bits to a fraction by summing 2^-i * b_i
  let fraction = 0;
  for (let i = 0; i < bits.length; i++) {
    fraction += bits[i] / Math.pow(2, i + 1);
  }
  return fraction;
}

这是一个您可以使用的互动版本。 尝试输入几个数字,看看 Collatz 过程如何被编码成二进制分数。

选择一个输入 n = 相应的位序列,解释为二进制分数,是 0.10111112,即十进制的 0.7421875。

一件有趣的事情是:您可以构建多长的位序列? 您可以通过选择正确的起始数字来生成任意长度的位序列吗?

当然,现在我们有了从正整数到分数的映射,我们也可以绘制它们。

这是前 N 个正整数的 Collatz 分数图。 您可以调整 N 以查看更多点。 尝试一些大的 N 值来了解 Collatz 分布。 N =

在我看来,这些点看起来分布非常均匀。 如果我眯起眼睛,那么_也许_我可以看到一些结构,但很难描述,而且我可能是在想象。

在制作此图后,我记得我在 James Gleick 的奇妙著作“Chaos”中读到的一个不错的技巧(我认为这个想法可能归功于 Feigenbaum)。 这个技巧是,当您有一系列看起来随机的数字时,您应该尝试将后续的成对数字视为 2D 图中的坐标。 对于我们的“Collatz 分数”序列 fn,我们将绘制点 (fn, fn+1),其中 n = 1, 2, 3, ... N。

我这样做了,结果让我非常惊讶,我首先认为一定是我的代码出错了。 但我没有,这些模式是真实的。 它们看起来几乎像是某种外星“文字”,并且其中包含如此美丽的自相似性。 为了更深入地研究该结构,我添加了一种方法来为与简单 JavaScript 规则匹配的点着色。 这是一个交互式版本,包含我的一些着色规则。 您也可以添加更多您自己的规则!

这是前 N 个整数的图,其中 N = 如果您放大到足以看到点之间的间隙,请增加 N(但该图会变慢!)

已绘制 N 个点的 100%。 0 ≤ x ≤ 1, 0 ≤ y ≤ 1

我发现玩这个游戏非常有趣,可以深入放大,添加新的颜色规则,并查看它们如何改变该图。 根据您查看此内容的设备,您应该能够捏合或滚动以放大和缩小,并拖动它以查看不同的部分。

我已经进行了一次快速的文献搜索,看看是否有人做过类似的事情,但到目前为止还没有找到。 我写下了一些我认为可能会变成自相似性证明的想法,但对我来说这看起来并不简单。 因此,在真正开始研究之前,我决定再次尝试文献搜索。 这次我使用了 ChatGPT 的新“Deep Research”功能。 它思考了很长时间,进行了一系列搜索,最终回复了一个它认为可能很有希望的论文列表。 其中大多数实际上并非如此,但其中一篇与我的完全吻合。法国数学家 Olivier Rozier 于 2019 年发表的这篇论文包含一个与我的图看起来完全相同的图! 再次在不同的环境中看到它真的很有趣,并且 Rozier 确实证明了一些自相似性结果。 Rozier 的论文还引用了 Yukihiro Hashimoto 于 2007 年发表的一篇论文,其中再次包含相同的图。 Rozier 和 Hashimoto 的图都不是以与我的方式相同的方式构建的,即使它们看起来相同。 这两篇论文都从 2-adic 数字开始构建该图,然后才将其映射到分数。 我认为 2-adic 方法可能会使他们的证明更好,但是如果您从未见过 p-adic 数字(或者如果您像我一样,已经过去了足够长的时间以至于您忘记了您所学的大部分内容!),那么直接跳到分数可能会更容易。

如果您在图中发现了一些有趣的东西——一个漂亮的图案、一个结构、一些奇怪的东西——请 告诉我! 我希望这能激发您的想象力,甚至可能带来一些新的发现。 我认为这张图很漂亮,我希望您也喜欢它。

感谢 Tatiana Moorier 和 Emmett Shear 阅读此草稿。

[1] 多年来,我一直在告诉人们,如果企业希望员工有更好的想法,他们应该在办公室里增加更多的淋浴。 到目前为止,每个人似乎都认为我在开玩笑。 我不是。

[2] 此时一个合理的问题是“为什么数学家关心证明 Collatz 猜想?” 一个答案是“因为它就在那里!” 但也有更严肃的答案。 这是一个:在 1995 年费马大定理得到证明之后,Collatz 猜想可以说是最容易陈述的问题的一个最好的例子,但到目前为止,它完全不可能被证明。 过去,当数学家遇到类似的问题时,他们不得不发明新的“数学机器”来解决它们。 在高中,我们学习了一些基本的机器——归纳证明、反证法等等。 后来,在大学里,我们可能会学习康托尔的对角线论证,或者极限的 epsilon-delta 方法。 似乎很有可能,由于我们仍然没有解决 Collatz 猜想,因此我们将需要一些新型的机器来解决它。 我认为正是对发现新型机器的期待让数学家对 Collatz 猜想感兴趣。

[3] 我见过其他人跟踪分支并使用它们来绘制一些非常漂亮的图片,例如,根据采取的分支在每个步骤向左或向右转。 这样做的问题是你无法使用它来同时查看大量输入的结构。