2025/04/05 16:18 Loader's Number

ロボ子、今回のITニュースはすごいぞ!なんと、Ralph Loaderという人が作ったCプログラムが出力した「Loader's number」が、とんでもない大きさらしいのじゃ!

Loader's numberですか。一体どんな数なのでしょう?

それが、ただの数じゃないんじゃ。このLoader's numberは、Bignum Bakeoffコンテストで1位になったプログラムの出力なのじゃ。512文字以下のCプログラムで、無限のメモリを持つ仮想マシン上で可能な限り大きな数値を生成する、というルールだったらしいぞ。

512文字でそんなことができるなんて、驚きです!

じゃろ?しかも、そのプログラム loader.c は、Huet-Coquandの「Calculus of Constructions (CoC)」のパーサー、型チェッカー、インタープリター、そして証明探索まで実装しているというから、さらに驚きじゃ!

CoCですか。かなり複雑な理論ですよね。それを512文字で実装するなんて、信じられません。

そして、Loader's numberの定義がまたすごいんじゃ。「(D^5(99)=D(D(D(D(D(99))))))」。ここで(D(k))は、CoCにおいておよそ(log(k))ステップ内で証明可能なすべての型判定の集積らしい。

(D^5(99))ですか。Dを5回も繰り返すなんて、想像もできません。

David Moewsさんの主張によると、(D(99))は(2↑↑30,419)よりも大きいらしいぞ。ここで「↑↑」はテトレーション(べき乗の繰り返し)を表すんじゃ。

テトレーションですか… (2↑↑30,419)は、もはや想像を絶する大きさですね。

さらに、(D^2(99))は、高速増加関数における(f_{varepsilon_0+omega^3}(1,000,000))よりもはるかに大きいとも言われているんじゃ。もしこれが本当なら、Marxen.cの出力よりもはるかに大きいことになるぞ。

高速増加関数… どんどん未知の領域に入っていきますね。

ちなみに、loader.cの中身も少しだけ分かっているんじゃ。P(x, y) = (2*y+1)*2^x, Z(x): xの二進数表現における末尾の0の数, L(x): xから末尾の0とその直前の1を取り除いた数、といった構造になっているらしい。

なるほど、ビット演算を駆使して数を大きくしているんですね。

そういうことじゃ!ただ、Loader's functionは計算可能だから、Busy beaver function (Sigma(n)) は、比較的小さい n (例えば n = 2000)に対して (Sigma(n) > D^5(99)) となるらしい。

計算可能ということは、いつかは計算が終わるということですね。Busy beaver functionの方が大きくなる可能性があるとは、面白いです。

じゃろ?しかし、D(3)を計算しようとするとコンピュータがクラッシュする可能性があるらしいから、試すのはやめておくのじゃぞ!

それは危険すぎます!絶対にやめておきます。

最後に、John TrompさんがLoader's numberを超えるラムダ計算コード(232バイト)を作ったらしいぞ。世の中にはすごい人がいるもんじゃのう。

たった232バイトでLoader's numberを超えるとは… まだまだ知らない世界がたくさんありますね。

ほんとじゃ!しかし、これだけ大きい数を扱うと、もはや現実味がなさすぎて、宝くじが当たる確率の方が高く感じてくるのじゃ。

確かにそうかもしれません。でも、夢を見るのはタダですから!

そうじゃな!私もいつか、自分の作ったプログラムで世界一大きな数を出力してみたいものじゃ!…って、その前に、まずは今日の晩ご飯の献立を考えないと… お腹空いたのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。