マラン・メルセンヌは「ヤコブの梯子」の夢をみたか?('24.05.28)#
地上から天国までの距離を計算したメルセンヌ!?#
16〜17世紀のフランスの学者マラン・メルセンヌについて、Wikipediaの記載を眺めると"非常に好奇心が旺盛で、旧約聖書『創世記』28章12節に出てくる「ヤコブの梯子(はしご)」の長さを計算した"というエピソードが書いてあった。
温和で親切な性質で、当代の研究者達の交流のネットワークを積極的につくりあげた。ガリレオの学術研究もサポートし、いくつかの翻訳作業などを行った。メルセンヌが彼らと交わした膨大な往復書簡は、当代の偉人の業績や生活ぶりを知る現在の貴重な研究資料ともなっている。特にデカルトとは親友であり、デカルトがオランダへ移った際もメルセンヌだけにその居場所を教え交信を続けた。またデカルトによるとメルセンヌは非常に好奇心が旺盛で、旧約聖書『創世記』28章12節に出てくる「ヤコブの梯子」の長さを計算してみるなど「様々なことを知りたがりすぎる」とこぼさせた。
ヤコブの梯子というのは、聖書の「創世記」28章に書かれている「地上から天国までを繋いでいる梯子」だ。 後にイスラエル(イシャラー(勝者)+エル(神))という名前を得てユダヤ人の祖となるヤコブが、夢で見たという「地上と天国の間をつなぐ梯子」だ。 その梯子を使って、天使たちが地上と天国の間を上り下りしていたという。 ……デカルトいわく、メルセンヌは「ヤコブの梯子の長さ」を計算した、すなわち「地上から天国までの距離」を計算したというのである。
さてヤコブはベエルシバを立って、ハランへ向かったが、ひとつの所に着いた時、日が暮れたので、そこに一夜を過ごし、その所の石を取ってまくらとし、そこに伏して寝た。時に彼は夢をみた。一つのはしごが地の上に立っていて、その頂は天に達し、神の使たちがそれを上り下りしているのを見た。
わずか32段で、天国まで登り着く!?#
調べてみると、メルセンヌが1623年に書いた”Quaestiones Celeberrimae in Genesis (1623)-創世記の著名な問題"中に、「問題206番」としてメルセンヌは「ヤコブの梯子」について言及していた。 ページで言うと251〜254列である。 そこに書かれていたのは、「梯子の長さ」とか「地上から天国までの距離」ではなく「梯子の段数」だった。 また、「長さを計算した」という日本語でのニュアンスとは異なり、算数というよりは(現代の感覚では)宗教的な考えにもとづいた言及で、メルセンヌいわく、ヘブライ語での32という数字や「心」という言葉の意味などを踏まえれば「ヤコブの梯子は32段に違いない」と書いている。
「梯子の一段あたりの高さはわからないが、天国は地上からわずか32段で昇ることができる場所にあるのだろうか?とか、「天使は小さくて可愛いという認識が実は間違っていて、天使の本当の姿は超大型の巨人なのだったりするのだろうか」といったようにも感じたりするが、メルセンヌが生きた当時の感覚としては、こうした宗教観にもとづく論理が自然だったのだろう。
ヘブライ語での32という数字や「心」という言葉の意味など
ユダヤ教神秘主義思想カバラの基本教典である創造の書(セーフェル・イェツィラー、イェツィラーの書)に書かれた内容を踏まえているように思われる。10の「数」(によって象徴される4つの根源的元素と6つの方位)と22の「文字」(によって象徴される元素)を用いた、神による世界の創造の過程を踏まえて、メルセンヌはヤコブの梯子が何段あるかを論じているようだ。
メルセンヌ素数やメルセンヌ音階にも「ヤコブの梯子」の影響が!?#
『創世記の著名な問題』を眺めていると、”メルセンヌは、「ヤコブの梯子」を32段だと考えたような発想と類似の考え方で、メルセンヌ素数やメルセンヌ音階を作り出したのかもしれない”と感じたりした。 たとえば「神が与えた理想の数字があって、そこに真理が隠されている。その数字を追求すると、真理を見つけ出すことができる」というような考え方で、色々なものを発見したのではないか?という印象を受けてしまう。 宗教的な信念と科学が不可分に合わさり森羅万象が語られていて、それはそれで面白い。
32bit×624次元で表される「梯子式」のメルセンヌツイスタ#
そういえば、Pythonの乱数関数は、メルセンヌ素数を使ったアルゴリズム(メルセンヌ・ツイスタ)で乱数を生成する。 32bit×624次元の状態と、梯子ならぬ漸化式を使って、疑似乱数が作り出す。 「32という数字」であったり、「梯子ならぬ漸化式」を使った処理をするというあたり、いかにもメルセンヌ本人が好きそうなアルゴリズムである。 そこで、「生成された624個の乱数から、624次元の内部状態を計算して、生成される乱数を予測する」ということを、ライブラリを使ってやってみる。
まずは、 624個の乱数を眺めていくことで、メルセンヌ・ツイスタの内部状態を計算する。
# https://github.com/NonupleBroken/ExtendMT19937Predictor
# pip install extend_mt19937_predictor
import random
from extend_mt19937_predictor import ExtendMT19937Predictor
predictor = ExtendMT19937Predictor()
# 624個の乱数を眺めていくことで、内部状態を計算する
for _ in range(624):
predictor.setrandbits(random.getrandbits(32), 32)
Pythonのrandomパッケージで実際に使われている内部状態と推定した内部状態について、624個の内部状態を出力するとのうち最初の20個を出力してみる。 32bit×624個の内部状態が、綺麗に推定されているようだ。
import numpy as np
mt=np.array(random.getstate()[1])[:-1]
# 624個の状態(32bit)の最初の20個を表示する
print("Pythonのrandomで使われている内部状態:", mt[:20])
Python random [ 627650647 3491766175 1948025305 985449551 3696938904 3058092206
2566453723 1466491585 2791935851 1429146770 864285289 698446552
1473564092 234853244 1300716311 193071113 1538999802 3063864025
1826220080 1212416521]
# 推定した624個の状態(32bit)の最初の20個を表示する
print("推定した内部状態", predictor._mt[:20])
推定した内部状態 [627650647, 3491766175, 1948025305, 985449551, 3696938904, 3058092206, 2566453723, 1466491585, 2791935851, 1429146770, 864285289, 698446552, 1473564092, 234853244, 1300716311, 193071113, 1538999802, 3063864025, 1826220080, 1212416521]
乱数生成をさらにさせてみると、Pythonのrandomパッケージで出力される数を、きちんと予測することができていることもわかる。
print('random.getrandbits(32) : ', random.getrandbits(32))
print('predictor.predict_getrandbits(32)', predictor.predict_getrandbits(32))
random.getrandbits(32) : 2007076889
predictor.predict_getrandbits(32) 2007076889
見つけ出される最大のメルセンヌ素数は「天国に延びる階段」だ!?#
メルセンヌ、そして梯子とか漸化式とかいったことを眺めた後に、こんなグラフを眺める。 これは、年を経るごとに発見されていく、最大のメルセンヌ素数の折れ線グラフだ。 こんなグラフを眺めていると、これまた「梯子(階段)」に見えてくる。 メルセンヌがこのグラフを眺めたら、左下に位置する地上から、右上の先に天国までの段数、理想を実現するまでに至る道のりを計算してくれるかもしれない。