先日、フェルマーの最終定理の本を読みました。
「3以上の自然数 n について以下の式を満たす(x,y,z)の組は存在しない」
x^n + y^n = z^n
というのがフェルマーの最終定理です。意味すら理解不能な事の多い数学の問題の中ではシンプルで僕のような門外漢でも証明すべき内容が分かります(証明は理解不能ですが・・)
フェルマーの最終定理については、いろいろと面白いエピソードがあります。さらに、証明に賞金がかけられたり、問題はシンプルなのに過去3世紀に渡り数学者たちの挑戦を退けてきた事などの話題性が知名度が高い理由でしょう。
中でもフェルマーさんがこの定理について本の余白に書き残した言葉も知名度アップに貢献しているのだと思います。
「この定理に関して私は真に驚くべき証明を見つけたが、この余白は狭すぎる」
数学セミナー
「フェルマーの最終定理」を購入したのは、ふらっと入店した書店でたまたま購入した数学セミナー 2023年5月号に、翻訳を行った青木薫氏のインタビュー記事が載っており、それを読んだからなのです。
サイモン・シンの本はとても面白くて(訳も上手)わかった気になれるのですが、証明の詳細については書かれていません。先のインタビュー記事にも書かれている事ですが、証明についての詳細が書かれていても僕のような読者にはおそらく理解する事はできないのです。
ただ、(整)数論というのも面白いかも!と思わせてくれました。
そんな折り、数学セミナーの2023年4月号で数学セミナー誌上で連載されていた「せいすうたん」をまとめて書跡として出版されるとのインタビュー記事が載っていました。
正直、難しそうで読める気がしなかったのですが、さわりだけでも楽しめるような構成になっているそうなので購入してみました。
せいすうたん
全12話で(1年分?)最初の2ページにナンセンス(?)漫画があり、次のページから「解説」「補足説明」「研究課題」「参考文献」という構成になっているのか。ふむふむとページをめくるとこれです。
最初からわけがわかりません(笑)
解説まではゆっくり読んで、補足から後ろは興味があればという感じで読み進めていくと、第三章で聞いたことのない「ゲーベル数列」というトピックが登場しました。
a{_n} = \frac{1 + a{_0}^2 + a{_1}^2 + \cdots + a{_{n-1}}^2}{n}
ただし、 a{_0} = 1
こんな形をしている数列です。nで割わられる形をしているので、すぐに有理数が出てきそうなのになんと n=42 までずっと「整数」が現れ続けるのです。しかし、 n=43 で突然有理数が現れるのだとか。
「な、な、なんだってー!?」
と感じられる人なら楽しめるのだと思います。
「ふーん?で?」
となれば次のトピックへ・・・
ところで、42といえば「生命、宇宙、そして万物についての究極の疑問の答え」なのは周知の事実。不思議な一致ですね。
他には、数学的帰納法のように n=k の時になりたち n=k+1 の時も成り立つ、ゆえに n 全体で成り立つ。というような少ないサンプルからの推論は突然崩れる事もあるだ。という一文を見て深いなぁと思いました。
巨大な数字
この「せいすうたん」のページをめくっていると、馴染みがない程の巨大な数が現れます。
こんなに大きな数字ではコンピュータで何も考えずに計算するとあっというまに桁あふれを起こして計算結果が間違ってきます。きっと巨大な数字を扱うためのライブラリかテクニックがあるのでしょうが、ぼくは知らないので、いくつかの言語で(特別なライブラリ等を使わずに)ゲーベル数列を計算して、どこまで正しい値を計算できるのかを試してみました。
Julia
Wikipediaによれば計算に適しているのだとか。一度使ったみたかったのです。
関数を定義して
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function gebel(n) sum::BigInt = 0 #sum::UInt128 = 0 if n == 0 return 1 else for i=0:n-1 sum += gebel(i)^2 end sum = (1 + sum) / n end return sum end |
実行
1 2 3 |
for i=0:13 println("n=$i ",gebel(i)) end |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
n=0 1 n=1 2 n=2 3 n=3 5 n=4 10 n=5 28 n=6 154 n=7 3520 n=8 1551880 n=9 267593772160 n=10 7160642690122633501504 n=11 4661345794146064133843098964919305264116096 n=12 1810678717716933442325741630275004084414865420898591223522682022447438928019170787328 n=13 252196724522541410812579097160361769690288016260160445329059280814119090545214793820262184563578020938099173214047605470598918235356882577926097523982428631511198597120 |
n=11までは正しい値が計算できました。
Python3
最近はpythonを使うことが多いのです。B-shellスクリプトもよく使いますが。
1 2 3 4 5 6 7 8 9 |
def gebel(n): sum = 0 if n == 0: return 1 else: for i in range(n): sum += (int(gebel(i)))**2 sum = (1 + sum) / n return int(sum) |
実行
1 2 |
for i in range(13): print("n={} {}".format(i,gebel(i))) |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
n=0 1 n=1 2 n=2 3 n=3 5 n=4 10 n=5 28 n=6 154 n=7 3520 n=8 1551880 n=9 267593772160 n=10 7160642690122633969664 n=11 4661345794146064639256537379451615515246592 n=12 1810678717716933777528667119138313921458050332436663977977469477433706987645032202240 |
正しいのは n=9 まで。n=10からは結果が間違っています。
Wolfram言語
Wolfram言語はあまり使ったことが無かったので、JuliaやPythonのように再帰で関数を定義しようとマニュアルを読んでいると、そのまま数列の定義を記述してあげればよいと書かれています。半信半疑でそのまま記述すると計算してくれました。
再帰は好きなのですが、Wolfram言語の方がスマートです。とりあえず本に載っている15まで計算させましたが間違える事なく計算してくれました。
1 2 |
gebel[0] = 1; gebel[n_] := (1 + Sum[(gebel[i])^2,{i, 0, n-1}])/n |
実行
1 |
i=0; Do[Print["n=",i ," ", gebel[i]];i++,16] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
n=0 1 n=1 2 n=2 3 n=3 5 n=4 10 n=5 28 n=6 154 n=7 3520 n=8 1551880 n=9 267593772160 n=10 7160642690122633501504 n=11 4661345794146064133843098964919305264116096 n=12 181067871771693344232574163027500408441486542089859122352268202244743892\ > 8019172629856 n=13 252196724522541410812579097160361769690288016260160445329059280814119090\ > 545214689630356941057966683002706243045823080829174307488383892818892448\ > 294858132739063481087616 n=14 454308484713561715682791275738874549536828030461484083859588186618491686\ > 248456861132325123746651440029866603550544292125235174147640872384813465\ > 160305130148273242631727996782469247359000431166789366981682565945143794\ > 526417901768308785153487576961252043035876479477989614805644085418098374\ > 5517181150456925894414444744263895766823050176 n=15 137597466188488359395830787217917870536840564716765370827755296802891247\ > 381260910221737685016911176571051577383559930252601425024116126030171739\ > 982076897018413487680419215088685480135603036618618242443644299688902199\ > 440561515320558290346734447879212310661811410223556503218650496884972635\ > 088559933653320592235241033475869594100438984490724838465142948408287279\ > 920217407759362535390468166759861288045166871269132930069954574034843798\ > 711410764553375228096906768057361126421460307856145496162822829306418740\ > 752779770509108256234815385182670930999924522480652771260928356710374064\ > 784227278659054689564450023644343151013069552578054282349768290883548679\ > 8511724130649088896 |
さすが mathematica !!
ちなみに geble[43]に挑戦してみましたが計算が終わらなそうでしたので途中で停止しました。
「せいすうたん」は、疲れた時などに少しづつ読むのに良い本だとおもいます。全て理解は難しそうですが、拾い読みだけでも知らなかった事がたくさん書かれていそうです 🙂