巨大数研究 Wiki
Advertisement

多変数アッカーマン関数を1変数化して、\(f_{\omega^\omega}(n)\) の増加速度を持つ関数を作るためには、 \[f(n) = A(\underbrace{1,1,...,1}_n) \approx f_{\omega^\omega}(n) \] とするのが手っ取り早いわけですが、もう少し刻みを細かく取ることはできないか、ということで、こんな関数を考えてみました。 \[f(\sum_{k=0}^{n} 10^k a_k) = A(..., a_3, a_2, a_1, a_0, 10) \approx f_{... + \omega^3・a3 + \omega^2・a2 + \omega・a1 + a0}(10) \] ただし、\(f(0)=1\)とします。すなわち、次のように計算できます。

\begin{eqnarray*} f(0) &=& 1 \\ f(1) &=& A(1,10) = 12 \\ f(2) &=& A(2,10) = 23 \\ f(3) &=& A(3,10) = 2^{13}-3 = 8189 \\ f(4) &=& A(4,10) = 2↑↑13-3 \approx 10↑10↑10↑10↑10↑10↑10↑10↑10↑19727.78 \\ f(11) &<& G < f(12) \\ f(99) &=& A(9,9,10) \\ f(100) &=& A(1,0,0,10) = A(9,10,10) > f(99) \\ f(101) &<& F_1 < f(102) \\ f(1000) &<& F_2 < f(1001) \\ \end{eqnarray*}

ここで、Gはグラハム数、\(F_n\)はふぃっしゅ数バージョンnです。

\(f(-n) = 1/f(n)\) として、微小数を扱うことも可能とします。

次に、この関数を実数に拡張することを考えます。

(1) \(0 \le n \le 2\)[]

線形補間とします。つまり、\((n,f(n)) = (0,1),(1,12),(2,23)\)の間を直線で結びます。すなわち、

\[f(n) = 1+11n (0 \le n \le 2) \]

とします。

(2) \(2 \le n \le 3\)[]

\begin{eqnarray*} f(2) &=& A(2,10) = 23 \\ f(3) &=& A(3,10) = 2^{13}-3 = 8189 \\ \end{eqnarray*}

この間の補間ですが、線形ではなく、A(3,n)のnで補間します。つまり、

\[ f(2+ 0.1 n) = A(3,n) (2 \le n \le 10) \]

とします。ここで、A(3,1) < A(2,10) なので、n=1は除外します。つまり、

\begin{eqnarray*} f(2) &=& A(2,10) = 23 \\ f(2.2) &=& A(3,2) = 2^{5}-3 = 29 \\ f(2.3) &=& A(3,3) = 2^{6}-3 = 61 \\ f(2.4) &=& A(3,4) = 2^{7}-3 = 125 \\ f(2.5) &=& A(3,5) = 2^{8}-3 = 253 \\ f(2.6) &=& A(3,6) = 2^{9}-3 = 509 \\ f(2.7) &=& A(3,7) = 2^{10}-3 = 1021 \\ f(2.8) &=& A(3,8) = 2^{11}-3 = 2045 \\ f(2.9) &=& A(3,9) = 2^{12}-3 = 4093 \\ f(3) &=& A(3,10) = 2^{13}-3 = 8189 \\ \end{eqnarray*}

とします。そして、この間を線形補間します。たとえば、

\begin{eqnarray*} f(e) &=& \frac{f(2.7)\times (2.8-e) + f(2.8) \times (e-2.7)}{2.8-2.7} \\ &=& 10210(2.8-e) + 20450(e-2.7) \\ &\approx& 1208.20592 \end{eqnarray*}

のように計算できます。

(3) \(3 \le n \le 4\)[]

まずは、0.1刻みに

\[ f(3+ 0.1 n) = A(4,n) (1 \le n \le 10) \]

と定義すると、

\begin{eqnarray*} f(3) &=& A(3,10) = 2^{13}-3 = 8189 \\ f(3.1) &=& A(4,1) = A(3,A(4,0)) = A(3,13) = 65533 \\ f(3.2) &=& A(4,2) = A(3,A(4,1)) = 2^{65536} − 3 \approx 2.5044 \times 10 ^ {19727} \\ f(3.3) &=& A(4,3) = A(3,A(4,2)) \approx 10 ^ { 7.5390 \times 10 ^ {19726} } \\ f(3.9) &=& A(4,9) = A(3,A(4,8)) \\ f(4) &=& A(4,10) = A(3,A(4,9)) \end{eqnarray*}

となります。そして、\(3 \le n \le 3.1\) については、

\begin{eqnarray*} f(3) &=& A(3,10) \\ f(3.1) &=& A(3,13) \\ \end{eqnarray*}

となるので、\( f(3+n/30) = A(3,10+n) \) のような形で補間して、

\begin{eqnarray*} f(3.03333...) &=& A(3,11) \\ f(3.06666...) &=& A(3,12) \\ \end{eqnarray*}

とします。さらに、\(3.1 \le n \le 3.2\) については、

\begin{eqnarray*} f(3.1) &=& A(4,1) = A(3,A(4,0)) = A(3,A(3,1)) = 65533 \\ f(3.2) &=& A(4,2) = A(3,A(4,1)) = A(3,A(3,13)) = A(3,2^{65536} − 3) \approx 2.5044 \times 10 ^ {19727} \\ \end{eqnarray*}

の間を、\( f(3.1+n/120) = A(3,A(3,1+n)) \) と補間します。つまり、

\begin{eqnarray*} f(3.133333...) &=& A(3,A(3,5)) = A(3,253) \approx 1.1579208923731 \times 10 ^ {77} \\ f(3.141666...) &=& A(3,A(3,6)) = A(3,509) \approx 1.3407807929942 \times 10 ^ {154} \end{eqnarray*}

となります。さらに、この間の補間は A(3,n) について、n=253から509までで補間します。すると、細かい計算は省略しますが、

\begin{eqnarray*} f(3.141569010...) &=& A(3,506) \approx 2.0949699890534 \times 10 ^ {152} \\ f(3.141601563...) &=& A(3,507) \approx 4.1899399781069 \times 10 ^ {152} \end{eqnarray*}

となり、この間を線形補間することで、

\[f(\pi) \approx 3.616584985 \times 10 ^ {152}\]

と計算できます。\(f^{-1}(10^{100})\) は、次のように考えます。

\begin{eqnarray*} f(3.135807292...) &=& A(3,329) \approx 8.749002899132 \times 10 ^ {99} \\ f(3.135839844...) &=& A(3,330) \approx 1.7498005798264 \times 10 ^ {100} \\ \end{eqnarray*}

となるので、この間を直線で結ぶと、

\[f^{-1}(10^{100}) = 3.135811946...\]

となります。

同様に、\(3.2 \le n \le 3.3\) の場合は、

\begin{eqnarray*} f(3.2) &=& A(4,2) = A(3,A(4,1)) = A(3,A(3,A(3,1))) = A(3,2^{65536} − 3) \approx 2.5044 \times 10 ^ {19727} \\ f(3.3) &=& A(4,3) = A(3,A(4,2)) = A(3,A(3,A(3,13))) \approx 10 ^ { 7.5390 \times 10 ^ {19726} } \\ \end{eqnarray*}

この間を、\( f(3.2+n/120) = A(3,A(3,A(3,1+n))) \) と、線形補間します。A(3,n) のネストの中で、1から13までの部分を線形補間するわけです。計算してみます。

\begin{eqnarray*} f(3.2+1/120) &=& A(3,A(3,A(3,2))) = A(3,A(3,29)) = A(3,4294967293) = \approx 3.87914 \times 10 ^ {1292913985} \\ f(3.2+2/120) &=& A(3,A(3,A(3,3))) = A(3,A(3,61)) = 2^{2^{64}}-3 \approx 10^{5.5530232885233 \times 10 ^ {18}} \\ f(3.2+3/120) &=& A(3,A(3,A(3,4))) = A(3,A(3,125)) = 2^{2^{128}}-3 \approx 10^{1.0243519943874 \times 10 ^ {38}} \\ f(3.2+4/120) &=& A(3,A(3,A(3,5))) = A(3,A(3,253)) = 2^{2^{256}}-3 \approx 10^{3.4856892121032 \times 10 ^ {76}} \\ f(3.2+5/120) &=& A(3,A(3,A(3,6))) = A(3,A(3,509)) = 2^{2^{512}}-3 \approx 10^{4.036152363014 \times 10 ^ {153}} \\ \end{eqnarray*}

となります。\(f^{-1}(10^{10^{100}})\) を計算するために、\(f(3.2+4/120) = A(3,A(3,253))\) と \(f(3.2+5/120) = A(3,A(3,509))\) の間を補間して、\[ f(3.2+4/120+77/30720) = A(3,A(3,330)) \approx 10^{5.2674246095797 \times 10 ^ {99}} \] と \[ f(3.2+4/120+78/30720) = A(3,A(3,331)) \approx 10^{1.0534849219159 \times 10 ^ {100}} \] の間にグーゴルプレックスがあります。この間を「線形補間」すると、\(f^{-1}(10^{10^{100}})\) は、ほぼ 3.2+4/120+77/30720 になります。そこで、この間をもっと「滑らかに」補間するためには、A(3,n)の関係式で、nで補間することになります。すなわち、

\begin{eqnarray*} f(3.2+4/120+77/30720) = A(3,A(3,330)) \approx A(3,1.7498005798264 \times 10 ^ {100}) \\ f(3.2+4/120+78/30720) = A(3,A(3,331)) \approx A(3,3.4996011596528 \times 10 ^ {100}) \\ \end{eqnarray*}

として、 \[10^{10^{100}} = 2^{log_{2}^{10} \times 10^{100}} \approx 2^{3.3219280948874 \times 10^{100}} \approx A(3,3.3219280948874 \times 10^{100}) \]

となるため、

\begin{eqnarray*} f^{-1}(10^{10^{100}}) &\approx& 3.2+4/120 + 77/30720 + \frac{3.3219280948874 - 1.7498005798264}{(3.4996011596528 - 1.7498005798264) \times 30720} \\ &\approx& 3.23586909 \\ \end{eqnarray*}

となります。

(4) \(4 \le n \le 5\)[]

0.1刻みの定義は(3)と同様で

\[ f(4+ 0.1 n) = A(5,n) (1 \le n \le 10) \]

と定義します。つまり、

\begin{eqnarray*} f(4) &=& A(4,10) \\ f(4.1) &=& A(5,1) = A(4,A(5,0)) = A(4,65533) \\ f(4.2) &=& A(5,2) = A(4,A(5,1)) \\ f(4.3) &=& A(5,3) = A(4,A(5,2)) \\ f(4.9) &=& A(5,9) = A(4,A(5,8)) \\ f(5) &=& A(5,10) = A(4,A(5,9)) \end{eqnarray*}

となります。そして、\(4 \le n \le 4.1\) については、(3)と同様の方針だと A(4,n) のnで補間することになりますが、10〜65533 というのはかなり刻みが細かくなりますので、 A(4,f(n)) で補間することとします。すなわち、すでに f(4)=A(4,10) 以下については連続関数として定義がされているので、逆関数を計算出来て、

\begin{eqnarray*} f^{-1}(10) &=& 9/11 \approx 0.818181818 \\ f^{-1}(65533) &=& 3.1 \\ \end{eqnarray*}

となります。したがって、

\begin{eqnarray*} f(4) &=& A(4,10) = A(4,f(9/11))\\ f(4.1) &=& A(5,1) = A(4,A(5,0)) = A(4,65533) = A(4,f(3.1))\\ \end{eqnarray*}

として、(x,y)=(4,9/11),(4.1,3.1) の2点間を結んだ線分に対して、\(f(x) = A(4,f(y))\) とします。

\(4.1 \le n \le 4.2\) については、

\begin{eqnarray*} f(4.1) &=& A(5,1) = A(4,A(5,0)) = A(4,A(4,1)) = A(4,A(4,f(0))) \\ f(4.2) &=& A(5,2) = A(4,A(5,1)) = A(4,A(4,65533)) = A(4,A(4,f(3.1))) \\ \end{eqnarray*}

の間を、\( f(4.1+n/31) = A(4,A(4,f(n))) \) と補間します。このように、(3)と基本的な手順は同じで、ネストの一番奥を \(A(4,f(n))\) で補間するところが変わります。

(5) \(n \ge 5\)[]

\(4 \le n \le 5\) の定義を拡張して、

\begin{eqnarray*} f(123) &=& A(1,2,3,10) \\ f(123.1) &=& A(1,2,4,1) = A(1,2,3,A(1,2,4,0)) \\ f(123.2) &=& A(1,2,4,2) = A(1,2,3,A(1,2,4,1)) \\ f(123.9) &=& A(1,2,4,9) = A(1,2,3,A(1,2,4,8)) \\ f(124) &=& A(1,2,4,10) = A(1,2,3,A(1,2,4,9)) \\ f(999) &=& A(9,9,9,10) \\ f(999.1) &=& A(9,9,10,1) = A(9,9,9,A(9,9,10,0)) \\ f(999.2) &=& A(9,9,10,2) = A(9,9,9,A(9,9,10,1)) \\ f(1000) &=& A(1,0,0,0,10) = A(9,9,10,10) = A(9,9,9,A(9,9,10,9))\\ \end{eqnarray*}

のように定義します。例えば、

\begin{eqnarray*} f(11.1) &=& A(1,2,1) = A(1,1,61) < G \\ f(11.2) &=& A(1,2,2) = A(1,1,A(1,2,1)) > G \\ f(101) &=& A(1,0,1,10) < F_1 \approx A(1,0,1,63) \\ f(101.1) &=& A(1,0,2,1) = A(1,0,1,A(2,2,3)) > F_1\\ f(1000.1) &=& A(1,0,0,1,1) = A(1,0,0,0,3) < F_2 \approx A(1,0,0,0,63) \\ f(1000.2) &=& A(1,0,0,1,2) = A(1,0,0,0,A(1,0,0,1,1)) > F_2 \\ \end{eqnarray*}

となります。さらに細かく定義するためには、ネストを計算していって、最後に \(A(X,1)\) (Xは配列) と \(A(X,A(X,1))\) が計算されたところで、1とA(X,1) の間で線形補間するというのが基本的な考え方ですが、A(X,1) が大きい値の時は、\(f^{-1}(x)\)で小さい数字にしてから線形補間する、という方法が良いかもしれません。この場合、関数の定義で自身を再帰的に呼び出しているので、うまく定義をしないとなりません。このあたりの定義は、未確定です。

Advertisement