第20話 急増加関数

 今日は・・・ロクリアちゃんにとって記念すべき日になるだろう。今まで避けてきたこの話題に、ついに突っ込むことになったのだ。これを知ってしまえばもう引き返せない。巨大数愛好者としての一方通行の門をくぐることになるのだ。

「はかせーー!きたよーーー!」

 無邪気に飛び込んでくるロクリアちゃん。後ろからしずしずとついてくるリディアさん。やっぱり微笑んでいる。

「きゅうぞうかかんすうの話、してくれるんでしょ!?楽しみにしてたの!」

 目をきらきら輝かせている。よし、私の準備も整った。今日は長くなるぞ。

「うん、急増加関数の話を始めるよ。


 まず、急増加関数は、FGHとよく略される。これは別に関数のfghと関係あるわけじゃなくて、Fast-growing hierarchyの略だ。高速で成長する階層、という意味だね。さて、急増加関数は、実は無限にある。無限といってもただの無限じゃない。再帰的に定義された順序数と同じ数だけある」

 ロクリアちゃんが手を挙げる。

「はい」

「再帰的に定義された順序数ってなーに?」

「簡単に言うと、手順の繰り返しで作れるような順序数ってことだよ。いまは全然気にしなくていい。これから先出てくる順序数はすべて再帰的に定義された順序数だ。もし再帰的に定義できない順序数が現れたら、そのときにまた説明しよう」

「はーい」

「じゃあ、先に進むね。


 急増加関数が順序数と同じだけある、とはどういうことか。実は、すべての急増加関数にはそれぞれ順序数に対応した名前がついている。たとえば、順序数1に対応する急増加関数は、

 f_1(n)

 だ。ここで、1はfの右下の添え字を意味する。xじゃなくてnを使ったのは、関数に入る数は自然数だという暗黙の了解があるからだよ。

 他の例を挙げよう。今回は実は0も順序数だということにしている。そこで、順序数0に対応する急増化関数は、次のような式で書く。

 f_0(n)

 他には、順序数ωに対応している急増加関数は、

 f_ω(n)

 と書く。もっと複雑な順序数、例えばω^2+ω×3+4に対応するような急増加関数は、

 f_ω^2+ω×3+4(n)

 だ。ごちゃごちゃしてきたけど、やっていることはとても単純だと思う」

 ロクリアちゃんもリディアさんもうなずいている。

「じゃあ、急増加関数がこれですでに無限に用意できた。といってもすべての急増加関数が関係ないふるまいをするわけじゃない。至って規則的にふるまう。そして、ルールはたったの3つ。


 ①順序数0に対応する急増加関数は、1を足す、という関数である。

 f_0(n)=n+1


 ②急増加関数に対応する順序数が極限順序数でないとき、ひとつ前の順序数に対応する急増加関数に変換できる。ただし、その時は関数をn個合成する。

 f_α+1(n)=f^n_α(n)

 =f_α(f_α(...n個...(f_α(n))...)

 ただし、αは順序数


 ③急増加関数に対応する順序数が、極限順序数であるとき、基本列のn番目の項の急増加関数に変換できる。

 f_α(n)=f_α[n](n)

 ただし、αは極限順序数、α[n]はαの基本列のn番目」


「はらひれほろ・・・」

 ロクリアちゃんは目を回している。リディアさんは微笑んでいる。

「ロクリア、数学はね、いつでもはじめに意味不明なものが出てきて、それを理解していくっていうのが勉強方法なの。だから、意味不明なものが出てくるのは、別に悪いことじゃないのよ。むしろそれが普通なの。これからわかっていきましょうね」

 リディアさんの声が部屋をやさしく包み込む。

「そう、この定義は式だけだととても理解しにくいよね。でも大丈夫、少し具体的に計算すればすぐにわかると思う。

 まずは①の練習をしよう。これは非常に簡単だ。例えば、次を計算できるかな?」

 f_0(5)

「えっとえっと・・・0のときは1足すんだよね、だから、6?」

「その通り!

 f_0(5)=6

 実は、急増加関数で、実際に入れた数を処理してくれるのはf_0だけだ。しかも、1を足すという簡単な操作しかしていない。これを注意しておくのは、後でとても役に立つことだよ。

 じゃあ、次は②を使う練習をしよう。これが急増加関数の肝だ。次の値はいくつかな?」

 f_1(3)

「ひええ・・・わ、わからない」

「さて、わからないときは、定義②の式にそのまま愚直に数を代入しよう。すると見えてくるよ」

「はい・・・定義②は・・・

 f_α+1(n)=f^n_α(n)

 =f_α(f_α(...n個...(f_α(n))...n個...)

 だったよね?つまりα=0・・・で、n=3だから・・・」

 f_1(3)=f^3_0(3)

 =f_0(f_0(f_0(3)))

「いいぞ!そして、f_0(3)はもうロクリアちゃんは計算できるよね」

「はい・・・」

 f_0(3)=4だから

 f_0(f_0(f_0(3)))

 =f_0(f_0(4))

 =f_0(5)

 =6

「あれ?これだけ?」

「そう、それだけ。実際に手を動かしてみると、すごく簡単だ。そして、3に3回1を足した、という構造が見えるから、

 f_1(n)=2n

 ということもわかるよね」

「わかる!」

「じゃあ、これは急増加関数に挑むときの大切な武器だよ。しっかりロクリアちゃんのものにしてね」

「うん!」

「じゃあ、実際にこの武器を使うと簡単に倒せる敵を紹介しよう」

 f_2(3)

「やってみる!」

 f_2(3)

 =f^3_1(3)

 =f_1(f_1(f_1(3)))

 ここで、f_1(n)=2nを使うと、

 =f_1(f_1(6))

 =f_1(12)

 =24

「その通りだ!ロクリアちゃん、それでね・・・」

「待って!私に言わせて!

 f_2(3)は、3回3に2を掛けるって意味だよね。だから、

 f_2(n)=n×2^n

 だ!!これ、ロクリア関数計算するときに、同じようなことやった!」

 リディアさんはとても嬉しそうに微笑んでいる。私も心底嬉しい。

「じゃあ、f_2がどういうものか、という武器をロクリアちゃんは手に入れた。これを使えば、次の結構凶悪な敵も・・・倒せるかな?」

 f_3(2)

「ふっふっふ、ロクリアにかかれば、これくらい・・・」

 f_3(2)

 =f^2_2(2)

 =f_2(f_2(2))

 =f_2(2×2^2)

 =f_2(8)

 =8×2^8

 =2048

「ロクリア関数だと2046になったけどなんだか近いね・・・」

「うん、これは偶然といえば偶然だし、偶然じゃないといえば偶然じゃない。難しいところだけど・・・」

「ねえ、わたし気付いたんだけど、f_2って足し算の回数をnで数えてて、f_3って、掛け算の回数をnで数えてるんだね。だからさ、f_4って冪乗の数をnで数えてる・・・これってさ、テトレーションみたい・・・」

 私は驚いた顔をする。

「あれ?変なこと言っちゃった?」

「いや、ロクリアちゃんが言ったことがまさに急増加関数の特徴だ!実際、急増加関数の順序数が自然数のとき

 f_α(n)

 の増加速度は、

 ハイパーα+1演算

 とぴったり一致する。ここでいうぴったりっていうのは値という意味ではなくて、

 f_αの計算をするときに、ハイパーα+1演算が出てくる、という意味だ。

 たとえば、f_4(2)を計算してみよう。

f_4(2)

=f^2_3(2)

=f_3(f_3(2))

=f_3(f^2_2(2))

=f_3(f_2(2×2^2))

=f_3(f_2(8))

=f_3(8×2^8)

=f_3(2048)

=f^2048_2(2048)

=f^2047_2(2048×2^2048)

=f^2047_2(2^2059)

...

なんだけど、ここで巨大数のパラドックスを悪用する。

n×2^nという式は、nが大きければこの式はほとんど2^nと近似できる。つまり、×nを無視してしまう。

ついでに、2^2059も、巨大数のパラドックスを悪用して、2^16=2^2^2^2に近似してしまおう。

さすがにやりすぎと感じるかもしれないが、

2^^4=2^2^2^2=2^16<2^2059<2^65536=2^2^2^2^2=2^^5

と思うと、なんだか納得できてしまうだろう。

つまり、

f_2(2^^n)≒2^2^^n=2^^(n+1)

これが作りたかった式だ。

では、本題の式に戻って、

f^2047_2(2^2059)

≒f^2047_2(2^^4)

≒2^^2051

となる。これで評価は終わりだけど、テトレーションの高さを2削れば底を3に変えても良い(3^^n<2^^(n+2)が成り立つ)。これも巨大数の悪用だが、成り立つことは簡単に確かめられると思う。ついでに、テトレーションの高さは2変えても3変えても大して変わらないから、

≒3^^2048


今得られた式は、

f_4(2)≒2^^2051≒3^^2048

だよ。

さて、これを使いながら、f_4(3)と比較しよう。

f_4(3)

=f^3_3(3)

=f_3(f^2_3(3))

ここで大雑把に、今までで最大級の悪用だけど、

≒f_3(f^2_3(2))

≒f_3(2^^2051)

としてしまう。すると、

f^(2^^2051)_2(2^^2051)

≒(2^^2051)^^(2051+2^^2051)

ここで、テトレーションの底は、3でも2^^2051でも大して変わらないし、2051+2^^2051は+2051の寄与部分はほとんどないので、やっぱり巨大数のパラドックスの悪用を一気に使って

≒3^^2^^2051

としよう。少しいじって

≒3^^3^^2048

としてもいいし、さらに悪用して、と言ってもこれは無視できないほど変わってしまっているけど、

≒3^^3^^3

≒3^^^3

としてもいい。

3^^2048を3^^3に変えたのは3^^3が7625597484987と十進表記できるほど小さい数なので、やり過ぎかと思うけど、これを認めてしまえば、

f_4(2)≒3^^2048≒3^^3≒3^^^2

f_4(3)≒3^^^3

と書き換えることもできる。

作りたかった式は、

f_4(n)≒3^^^n

だ。n=2,3のときは無視できない違いがあるけど、4以上ならほぼ近似できてると言っていいよ。

つまり、f_4はだいたいハイパー5演算の強さ、ということがわかるね」

「ひええ、なんか、難しい。。これ、考えてどうするの??」

「まあ、巨大数を考えることにそもそもあんまり意味はないけど・・・」

私がそう言うと、

「たとえばロクリア関数をL(n)とすると、nが大きければ

 L(2^n)≒f_n-1(n)

 ですね。グッド博士」

 と言ってリディアさんはにっこり笑った。

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る