「数学コラム Rayo数より大きな数の構築を試みる4 ツチノコ関数 (2020/02/14)」


いよいよ本題。
Rayo数より大きなツチノコ関数の出現です。



ツチノコ関数の定義:
円周率の中で、
A1.1桁目の値は0である
A2. 2,3桁目の値は00である
A3. 3,4,5桁目の値は000である
A4. 4,5,6,7桁目の値は0000である
...
A1、A2、A3、・・・を調べて行って
最初に成立したインデックス。

一つも成立しない場合は0。
  (ただし末尾に到達する事は不可能なので0が返ることはない)

擬似コード:
(疑似だが、実際にやろうと思えば
 プログラムもできるし実行もできる)
namespace tsuchinoko
{
  bool isZeros(int at)
  {
    int length = at;
    for (int i=0;i<length;i++)
    {
      if (円周率の(at+i)桁目の値 != 0)  return false;
    }
    return true;
  }

  public int progress = 0;
  int Tsuchinoko()
  {
    for (int i=1;;i++)
    {
      progress = i;
      if (isZeros(i))  return i;
    }
    
//人間がここに到達することはできない
    return 0;
  }
}



(議論を簡単にするため、
仮に円周率をランダムな0~9な数字と仮定すると)

A1の成立確率 = 0.1
A2の成立確率 = 0.01
A3の成立確率 = 0.001
...
A10の成立確率 = 0.0000000001
....
Anの成立確率 = 0.0000...(n個)...0001
...

これらの条件をすべてorで足し合わせても

P = P(A1∨ A2∨ A3...)
= 1-P(¬A1∧¬A2∧¬A3...)
= 1- [(1-0.1) * (1-0.01) * (1-0.001) * ...]
= 0.10998990000100095...

なので、
円周率を1桁目~∞桁目まで精査しても
条件は達成されない可能性があります。



と、いうかまず100%不成立。^^;

2020年の円周率の世界記録は34兆桁。

その中で条件は一つも達成されてないから
確率は
  0.0000...(34兆個)...1
まで下がってる。



確率的に考えると
もはや発生しないと言っていいレベルなので、

namespace tsuchinoko
{
  public int progress = 0;
  int Tsuchinoko()
  {
    for (int i=1;;i++)
    {
      progress = i;
      if (isZeros(i))  return i;
    }
    return 0;
  }
}
は実質的に無限ループであり、

ツチノコ関数の(暫定)値
  int tsuchinoko.progress
は無限に伸び続け、

ツチノコ関数 > Rayo数
が成立します。

(無限ループ構造なので当然と言えば当然ですが)



・・・が!
それでも無限ループとは言い切れない。^_^

例えば100個の連続0だって
確率的に言えば
10100文字のランダム数値の中に一個は含まれる。

100兆個の連続0だって
確率的に言えば
10100兆の中に一個は含まれる。

10100個の連続0だって
確率的に言えば
1010100の中に一個は含まれる。

TREE(3)個の連続0でさえ
確率的に言えば
10TREE(3)の中に一個は含まれる。
  
  
円周率の長さは無限大なので、
探索範囲さえ十分に増やせば
どれだけ長い数値であろうとも
いつかは見つかるのだ。



結局ツチノコ関数が無限ループか有限ループなのかは
誰にもわかりません。

立証も反証もできない命題であるからして

namespace tsuchinoko
{
  public int progress = 0;
  int Tsuchinoko()
  {
    for (int i=1;;i++)
    {
      progress = i;
      if (isZeros(i))  return i;
    }
    return 0;
  }
}

は永遠に計算を続けることになる。

かと言って。本当にこれは永遠なのか、
もしかしたらbreak条件が発生してループが途切れる可能性も
本当に少しは残されてるので
「無限ループだから。」と、
計算を途中で停止させるわけにもいかない。



まとめ:
  • Rayo数 = 10100文字で記述できる全ての数の中で最大 + 1
      巨大有限数の中では最強最大。
      
      「全ての定義可能な数より大きい」
      って文章的なメタを取ってるので、ぶっちゃけこれを上回る数を作るのは
      無理デス。
      定義してしまった時点で負ける。
      
      
  • だが 
      ツチノコ関数 > Rayo数
     である。
      (ツチノコ数 ではなくツチノコ関数なのがポイント)

      なぜならツチノコ関数は無限ループを使ってるので、
      サイズで言えばあらゆる有限数を超える。

  • ツチノコ関数は計算可能です。
      ツチノコ関数を算出するための、
      実際にプログラミングもできる手順は開示されています。
      (ただし有限時間内で計算が終わるかはまた別問題)
      
      
  • ツチノコ関数はオラクルを使いませんです。

      Rayo数などは無限ループ問題のせいで、
      手当たりしだいに羅列する定義可能式の中で
      どれが無限ループか/有限停止なのかは判定できません。
      
      それらの中から「最大の有限」を選ぶ、つまり無限ループを除外するためには
      オラクル(=神託・神のお告げ)と言う万能ループ判定機の公理を仮定します。
      だが人間はオラクルを持っていないために、人間の立場からはRayo数は計算不能。
      
      ツチノコ関数はオラクル非依存なので実際に計算が可能です。
      (ただし有限時間内で計算が終わるかはまた別問題)
      
      
  • ツチノコ関数はRayo数の定義。
      10100文字で記述できる全ての数
      には出てきません
      
      なぜならRayo数は「有限時間以内に計算可能な数」
      であり、無限ループ系は除外される。
      
      そしてツチノコ関数は、
      確率的な推察からはほぼ無限ループと言える。
      なのでRayo数の定義には入ってこない。
      
      
  • ただし完全な無限ループというわけでもない。
      ループの中にはほんの僅かだが
      breakする可能性は常に残っている。
      
      確率は恐ろしく低いが
      実際に発動する可能性もあるので
      完全な無限ループとは言い切れない。


  • 結局の所、
      ツチノコ関数は無限ループとも有限ループとも言い切れない
      未判別の関数であり、
      どちらの可能性も残されてる以上は
      とりあえず計算してみるしかない。
      



    最後に。

      ・Rayo数

      ・ツチノコ関数
    「どっちが先に計算が終わるか?」
    と聞かれたらまず確実にRayo数の方が速い。より少ないマンパワーになるでしょう。

    Rayo数はどれだけ大きくても有限時間内に終わることが保証されてる。
    ツチノコ関数は有限時間で終わるパターンもあれば、終わらないパターンもある。


    これなら1ランクぐらいは上の大きさに到達できたもしれない。
    もし到達できてたら、命名しましょう。

    巨大有限数 ランク22 シュレーディンガーの猫

    ・無限ループ for(;;)から始まり、

    ・breakの条件を
      「  現状の人間の科学力、もしくは想定している(ZFCを超える拡張)公理体型においては
        まだ肯定も否定もできてない条件」
        
    に設定することで

    ・計算の途中でbreak条件が見つかったら計算が終わるパターンと

    ・もしくは(神の視点から見て)break条件は永久に発動しない。
      だが人間の視点からはそれがわからないので、永久にbreak条件の成立を探し続ける

    を作るタイプの関数。