「数学コラム Rayo数より大きな数の構築を試みる1 (2020/01/05)」


元旦イラスト ☆

 (今回のコラムとは関係ないですがいつか使う予定)



2020年の正月数学コラム

Rayo数より大きな数の構築を試みる1

まずRayo数の定義を振り返ります。


Rayo数とは(大雑把に言って)
「10^100文字で記述できる全ての式の中で最大の数」 +1
である。
Rayo数の定義


そもそも。
Rayo数自体は
  2006年に見つかった、TREE3と言う異常すぎる巨大数
を発端にスタートとした、
巨大有限数の研究・発掘・分類の理論。

その中で
 「TREE3やSCG13を超える、世界最大のウルトラ巨大な数を、誰が作れるか
のコンテストの答えとして2013年に発案された数であり。

それ以来現在2020年までの巨大有限数・世界記録を保持してる
数学史上最大の巨大有限数です。




・・・・うん。

デカいよ。
このRayo数はデカい。
TREE3やSCG13なんて比較にならないサイズだし、
恐らく誰も勝てない。

だって
  ・10100文字で記述できる、全ての式を、無差別に調べて
  ・その中で最大の数を拾ってくる
  ・+1する
  

こんな書き方をすれば
そりゃ最大にもなるわ。




ちなみに。
具体的なRayo数の値については
チューリングマシンの停止問題・判定不可能性 により理論的に計算不能です。

作者のRayoさん自身も含め、
具体的な値を誰も知らない。^_^;


ここまでくればやってることは
どれだけメタを取れるか。
完全な言葉遊びになってて
学術的な価値は皆無なんですが。


それでも果たして。
Rayo数を超えるサイズなんてものは作れるか・・・?

 → 難しいが・・・私なりの答えでやってみます



論より証拠。

Rayo数を超えるサイズを
いまから実演してみせます。

int IL()
{
  int n=1;
  for (;;)
  {
    n *= 2;
    if (n%10 == 5) break;
  }
  return n;
}

主張:
このIL関数の中にあるnの値は、
Rayo数より大きくなる。


証明:
nの値は
  1,2,4,8,16,32,64,128,...
と増加し続ける。
  
1の桁に注目すると
  1,2,4,8,6,2,4,8,6,...
    
2,4,8,6のパターンをループしてる。
つまり
  if (n%10 == 5)  break
文が達成されることはない。


IL()は無限ループであり、
無限ループである以上nは無制限に大きくなる。

つまりnはいかなる有限数、Rayo数をも超え
ループを続けてればいつかは
  n >Rayo数
が達成される。
     □
  




int IL()
{
  int n=1;
  for (;;)
  {
    n *= 2;
    if (n%10 == 5)  break
  }
  return n;
}

論より証拠。はい!
このコンピュータープログラムを
走らせれば確実に
  n>Rayo数
は達成できます。

そして、ループのbreak条件を変更することで
(確率的な意味で)サイズは若干変更することができる。

無限ループ∞から始めて数を小さくする

これがこのコラムの骨子。
ベーシックアイディアです。



・・・ま。これが一つの論法ですわ。^_^;


ただしこの論法はあくまでコンピューター論からのアプローチであり
数学的には不正です。

なぜなら
nは常に変化しつづけ、不定であり
値が確定しない。

そんなものはとしては認められない。
・・・当たり前ですわな。(汗)



ただ面白い所としては
いま我々がプログラム

int IL()
{
  int n=1;
  for (;;)
  {
    n *= 2;
    if (n%10 == 5) break;
  }
  return n;
}

を不正と判定したのは
    if (n%10 == 5) break;
は永遠に達成されないと
理性で知ることができたからです。


IL関数を計算してるコンピューター自身は
そんなことを知りませんから、

コンピューターの立場からすると
黙々と計算を続けいつかは
  n > Rayo数
を示します。



つまり数の大きさ、
大小関係というのは実はそこまで絶対的な物ではなく
それを見ている読者の知識量に依存します。


もちろん。理論的に言って、
全知全能の神の視点から見れば大小関係は絶対的ですが、
われわれ人間の知識量では大小を判定できない問題が少なからずある。


え。無限ループは不正だって?

じゃあ条件をちょっと緩めて、
無限ループ部分の判定を変えてみます。

int Cat()
{
  int n=1;
  for (;;)
  {
    n *= 2;
    if (円周率の[TREE3]桁番目の数 < 5) break;
  }
  return n;
}

今回は、完全な無限ループではない。
breakが発生する可能性がある。


さてこの関数。
nの値はいくつでしょうか?

無限?
有限?
Rayo数より大きい?小さい?

(次回に続く)