Skip to main content
994 words5 min

数学:燃烧数

Summary

燃烧数由燃烧速度不均匀的引线计时问题定义。两个相差小于 1 的燃烧数 a、b 可以生成 (a+b+1)/2,由此得到一个序型为 ε0 的良序集。题目中的递归函数表示相邻温和燃烧数之间的间距,其中 f(0)、f(1)、f(2) 依次为二的负一次、负三次和负十次方,而 f(3) 已经等于二的负 1541023937 次方。该函数对所有实数输入都会终止,但皮亚诺算术无法证明它对所有自然数输入都会终止。

一道只求 f(3)f(3) 的递归钓鱼题。

参考资料​

题目​

考虑如下递归算法:

f(x)={−xx<012f(x−f(x−1))x≥0f(x)= \begin{cases} -x & x<0 \\ \frac{1}{2}f\bigl(x-f(x-1)\bigr) & x\geq 0 \end{cases}

求 f(3)f(3)。

计算​

f(0)=12f(−f(−1))=12f(−1)=12f(0)=\frac{1}{2}f\bigl(-f(-1)\bigr) =\frac{1}{2}f(-1) =\frac{1}{2} f(12)=12f(12−f(−12))=12f(0)=14f\left(\frac{1}{2}\right) =\frac{1}{2}f\left(\frac{1}{2}-f\left(-\frac{1}{2}\right)\right) =\frac{1}{2}f(0) =\frac{1}{4} f(1)=12f(1−f(0))=12f(12)=18f(1)=\frac{1}{2}f\bigl(1-f(0)\bigr) =\frac{1}{2}f\left(\frac{1}{2}\right) =\frac{1}{8} f(2)=12f(2−f(1))=12f(158)f(2)=\frac{1}{2}f\left(2-f(1)\right) =\frac{1}{2}f\left(\frac{15}{8}\right)

自变量是实数,不能仅在整数上递推。下列负数项直接由 f(x)=−xf(x)=-x 得到。

先补出 f(78)f\left(\frac{7}{8}\right):

f(34)=12f(34−f(−14))=12f(12)=18f(78)=12f(78−f(−18))=12f(34)=116\begin{aligned} f\left(\frac{3}{4}\right) & =\frac{1}{2}f\left(\frac{3}{4}-f\left(-\frac{1}{4}\right)\right) \\ & =\frac{1}{2}f\left(\frac{1}{2}\right) \\ & =\frac{1}{8} \\ f\left(\frac{7}{8}\right) & =\frac{1}{2}f\left(\frac{7}{8}-f\left(-\frac{1}{8}\right)\right) \\ & =\frac{1}{2}f\left(\frac{3}{4}\right) \\ & =\frac{1}{16} \end{aligned}

再补出 f(1316)f\left(\frac{13}{16}\right):

f(14)=12f(14−f(−34))=12f(−12)=14f(58)=12f(58−f(−38))=12f(14)=18f(1316)=12f(1316−f(−316))=12f(58)=116\begin{aligned} f\left(\frac{1}{4}\right) & =\frac{1}{2}f\left(\frac{1}{4}-f\left(-\frac{3}{4}\right)\right) \\ & =\frac{1}{2}f\left(-\frac{1}{2}\right) \\ & =\frac{1}{4} \\ f\left(\frac{5}{8}\right) & =\frac{1}{2}f\left(\frac{5}{8}-f\left(-\frac{3}{8}\right)\right) \\ & =\frac{1}{2}f\left(\frac{1}{4}\right) \\ & =\frac{1}{8} \\ f\left(\frac{13}{16}\right) & =\frac{1}{2}f\left(\frac{13}{16}-f\left(-\frac{3}{16}\right)\right) \\ & =\frac{1}{2}f\left(\frac{5}{8}\right) \\ & =\frac{1}{16} \end{aligned}

另一支从已有结果继续递推:

f(54)=12f(54−f(14))=12f(1)=116f(32)=12f(32−f(12))=12f(54)=132f(138)=12f(138−f(58))=12f(32)=164f(74)=12f(74−f(34))=12f(138)=1128\begin{aligned} f\left(\frac{5}{4}\right) & =\frac{1}{2}f\left(\frac{5}{4}-f\left(\frac{1}{4}\right)\right) \\ & =\frac{1}{2}f(1) \\ & =\frac{1}{16} \\ f\left(\frac{3}{2}\right) & =\frac{1}{2}f\left(\frac{3}{2}-f\left(\frac{1}{2}\right)\right) \\ & =\frac{1}{2}f\left(\frac{5}{4}\right) \\ & =\frac{1}{32} \\ f\left(\frac{13}{8}\right) & =\frac{1}{2}f\left(\frac{13}{8}-f\left(\frac{5}{8}\right)\right) \\ & =\frac{1}{2}f\left(\frac{3}{2}\right) \\ & =\frac{1}{64} \\ f\left(\frac{7}{4}\right) & =\frac{1}{2}f\left(\frac{7}{4}-f\left(\frac{3}{4}\right)\right) \\ & =\frac{1}{2}f\left(\frac{13}{8}\right) \\ & =\frac{1}{128} \end{aligned}

最后逐层代回:

f(2916)=12f(2916−f(1316))=12f(74)=1256f(158)=12f(158−f(78))=12f(2916)=1512f(2)=12f(158)=11024=2−10\begin{aligned} f\left(\frac{29}{16}\right) & =\frac{1}{2}f\left(\frac{29}{16}-f\left(\frac{13}{16}\right)\right) \\ & =\frac{1}{2}f\left(\frac{7}{4}\right) \\ & =\frac{1}{256} \\ f\left(\frac{15}{8}\right) & =\frac{1}{2}f\left(\frac{15}{8}-f\left(\frac{7}{8}\right)\right) \\ & =\frac{1}{2}f\left(\frac{29}{16}\right) \\ & =\frac{1}{512} \\ f(2) & =\frac{1}{2}f\left(\frac{15}{8}\right) \\ & =\frac{1}{1024}=2^{-10} \end{aligned}

引线计时​

燃烧数(Fusible Number)来自引线计时问题。

一根引线从一端点燃后,恰好一小时烧完,但各处燃烧速度并不均匀。若两端分别在时刻 aa 与 bb 点燃,烧完的时刻为:

a∼b=a+b+12a\mathbin{\sim}b=\frac{a+b+1}{2}

运算要求 ∣a−b∣<1|a-b|<1。

规定 00 是燃烧数。若 a,ba,b 是燃烧数且 ∣a−b∣<1|a-b|<1,则 a∼ba\mathbin{\sim}b 也是燃烧数。

例如:

0∼0=120\mathbin{\sim}0=\frac{1}{2} 0∼12=340\mathbin{\sim}\frac{1}{2}=\frac{3}{4} 12∼12=1\frac{1}{2}\mathbin{\sim}\frac{1}{2}=1

所有燃烧数都是非负二进有理数,反之不成立。

递归式​

2022 年的论文构造了燃烧数的子集 F0\mathcal{F}_0,称为 温和燃烧数(Tame Fusible Number)。

设 T(x)T(x) 表示大于 xx 的最小温和燃烧数,则:

f(x)=T(x)−xf(x)=T(x)-x

因此,f(x)f(x) 是 xx 到下一个温和燃烧数的间距。

早期资料曾把同一个递归式用于完整燃烧数集合。2012 年的综述给出了反例。

这个递归式仅对应 F0\mathcal{F}_0,不是燃烧数的定义。

序数​

燃烧数按通常大小构成良序集,序型为 ε0\varepsilon_0。温和燃烧数的序型同样是 ε0\varepsilon_0。

在 F0\mathcal{F}_0 中,整数 1,2,31,2,3 的位置依次为:

1⟷ω,2⟷ωω,3⟷ωωω\begin{aligned} 1 & \longleftrightarrow\omega, \\ 2 & \longleftrightarrow\omega^\omega, \\ 3 & \longleftrightarrow\omega^{\omega^\omega} \end{aligned}

不断迭代 α↦ωα\alpha\mapsto\omega^\alpha,上确界就是 ε0\varepsilon_0。

终止​

递归调用的参数都小于原参数,但这不能证明算法终止。实数存在有下界的无限严格递减数列。

论文利用温和燃烧数的良序性,证明了算法对所有实数输入都会终止。不过,皮亚诺算术(Peano Arithmetic,PA)无法证明:

对每个自然数 nn,计算 f(n)f(n) 的递归算法都会终止。

这个结论针对所有自然数输入,不影响单独计算某个固定的 f(n)f(n)。

求解​

令 d(n)=−log⁡2f(n)d(n)=-\log_2 f(n)。根据前面的计算:

d(0)=1,d(1)=3,d(2)=−log⁡22−10=10\begin{aligned} d(0) & =1, \\ d(1) & =3, \\ d(2) & =-\log_2 2^{-10}=10 \end{aligned}

论文给出的递推关系可继续算出:

d(3)=1541023937d(3)=1541023937

因此:

f(3)=2−1541023937f(3)=2^{-1541023937}