開発者用拡張機能を公開するサイト

無限ホテルのパラドックスについて

プログラミングで無限集合を使う事はできませんが、
その考え方自体はとっても稀に使うことがあります。
ただし普段のプログラマーが気にする必要は特にありません。

では無限集合とは何か。
つまり無限です。
限りが無いということです。

どういうことですかと。
それについてはよく「無限ホテルのパラドックス」という理論を交えて解説されます。

無限ホテルのパラドックスについては数式の計算を説明しているサイトや
youtubeで解説動画もあるので今更追加の解説をする必要はありません。

では本項の議題は何かというと、なぜあれに違和感を抱くのか。
その答えはそもそも無限を説明する際に「有限の定義」を使ってるからですが…。

無限の客

無限ホテルのパラドックスだと客が隣の客室にずれるという「客のアクション」が発生します。
これが誤解を招くので以下のように変更します。

無料の商品を受け取る長蛇の列がある

と。

客客客客客客客客客客客客客客客客客客客→
こんな感じです。

この長蛇の列は無限に続いています。
そんな長蛇の列で商品は受け取れるのか? と疑問に思うかもしれませんが
用意してある商品も無限です。
つまり全ての客は「必ず商品を受け取れます」

因みに商品の渡し方は時間になったら客の手元に突然出現します(待ち時間0)。

客の横入り

そこへ商品を欲する新しい客が来ました。

客客客客客客客客客客客客客客客客客客客→
客(New)

こいつは悪いやつで、長蛇の列に横入りしました。

普通なら怒られるところですが、客は全員商品を受け取れます。
横入りしたこの客を含め全員です。しかも待ち時間0。損なことは一切ありません。

「じゃぁいいか」と気にしなくてもよいことになりますね。

つまり客が横入りしても長蛇の列は何一つ違いのない長蛇の列のままになります。

客客客客客客客客客客客客客客客客客客客→
客が一人入ったところで元のまま。

つまり何が言いたいかというと、無限に同種のものを加えても無限のままだということ。
そんなことが論理的にあり得るのか?
というものを証明しているのが無限ホテルのパラドックスで解説されている数式です。

問題なのは「それ別に列を作って待ってる必要なくない?」という疑問。

そしてVR空間でこれを擬似的に再現することはできますが
その場合も0.1秒未満の誤差は発生してしまうという有限世界の限界があること。

プログラマーの視点

foreachでループする場合
[k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,]は無限集合

[0,1,2,3,4,5,6,7,8,9]をループさせて
{0:k,1:k,2:k,3:k,4:k,5:k,6:k,7:k,8:k,9:k,}から値を取り出すなら有限集合