- インターネット上の果物・絵文字の数式パズルの変種を整数ディオファントス方程式として捉え、正の整数解を作るまでの過程を追跡する
- 核心となる道具は、整数解を直接探すのではなく、まず有理点を見つけ、直線や接線で新しい有理点を生成する幾何学的な方法
- 変数変換と回転を経た方程式は対称的な楕円曲線になるが、最初に見える簡単な点は、元の問題の正の解にはそのままつながらない
- 楕円曲線上で2つの有理点を結ぶ直線や、1点での接線は3つ目の交点を作り、Vietaの公式のおかげでその点も有理点のままになる
- Mathematicaで自明でない点を見つけ、演算を繰り返した末に、元の変数へ戻したときに可能な巨大な正の整数解を構成する
インターネットの絵文字パズルが数学問題に変わった過程
- インターネットには、バナナの本数のような細部で混乱させ、異なる答えが出るように作られた絵文字数式パズルが広く出回っていた
- 2017年初め、r/mathにはFacebook風の果物数学パズルにうんざりしているという趣旨のreddit threadが投稿され、あるユーザーが果物の絵を使ったより難しい問題を作った
- Sridhar Rameshがその問題を少し変えて広く拡散したことで、最小解が非常に長く、楕円曲線の知識が必要だと考えられる悪名高い問題になった
- 目標は、その変形された絵文字問題を実際に解く過程である
準備例:ピタゴラス三つ組と有理点
- まず、ピタゴラス三つ組を見つける問題を、より簡単な例として扱う
- 整数解を直接探すのではなく、対応する単位円上の有理点を探す問題に変えると、構造が単純になる
- 単位円上のある有理点から出発し、有理数の傾きを持つ直線を引くと、円と交わる2つ目の点も有理点になる
- 直線と円の交点を求めると二次方程式が出てくる
- 係数が有理数で、1つの根がすでに有理数なので、Vietaの公式によりもう一方の根も有理数になる
- 逆に、単位円上の別の有理点は、出発点と結ぶ直線の傾きが有理数なので、すべての有理点を同じ方法で得られる
- この過程は、すべてのピタゴラス三つ組を2つの正の整数と倍数で表す標準形へとつながる
- 重要なパターンは直線で新しい点を得る方法であり、元の絵文字問題でも似たアイデアが使われる
元の方程式を楕円曲線に変える
- 絵文字問題の方程式は、分母を取り除いた後、整数解ではなく変数比に関する有理点を探す問題に変わる
- 正の整数解だけを直接探すのではなく、正数と負数を含む有理点全体をまず探索する
- グラフは2つの変数の入れ替えに対して変わらないため、斜めの対称性を持つ
- 便宜上、変数変換によってグラフを回転し、軸に対して対称な形にした。この曲線を楕円曲線と呼ぶ
- グラフ上には目で確認できる簡単な有理点があるが、元の問題の有効な正の解には対応しない
- そのため、簡単な点を出発点にして、さらに多くの有理点を作る必要がある
楕円曲線でも機能する直線トリック
- 楕円曲線上の2つの有理点 (P)、(Q)を結ぶ直線を引くと、その直線は曲線と3つ目の点 (R)で交わる
- この3つ目の交点も有理点になる
- 直線の方程式を楕円曲線の方程式に代入すると、1つの変数に関する三次方程式が出てくる
- 三次方程式の係数は有理数である
- すでに2つの根は (P)、(Q) の座標に由来する有理数なので、Vietaの公式により3つ目の根も有理数になる
- 直線の方程式に再び代入すると、残りの座標も有理数として定まる
- (P=Q) の場合は、2点を結ぶ直線の代わりにその点での接線を使い、交点は重複度を含めて計算する
- 最初に見つけた簡単な点同士を結んだり接線を引いたりしても、いくつかの点が繰り返されるだけで、新しく有用な点へは広がらない
- これらの点は torsion point なので、同じ直線トリックを繰り返しても、もはや新しい点へ抜け出せない
有効な領域内の有理点を見つける
- Mathematicaで楕円曲線上のあまり自明でない有理点を探索し、そのうちの1つを以後の計算に使用する
- 目標は任意の有理点ではなく、元の変数に戻したときに3つの値がすべて正になる点を見つけること
- すべての変数が負であれば、符号をすべて反転して正の解を得られるため、1つの変数を正と仮定して条件を逆算する
- この条件は、変換後の座標平面における特定の緑色の領域として現れ、楕円曲線上の有理点をその領域内へ送る必要がある
- 手計算では非常に煩雑なため、Mathematicaで直線・接線演算から生じる交点座標の公式を計算する
- 2点を結ぶ直線の3つ目の交点と、1点での接線が作る3つ目の交点について座標公式が作られ、式が非常に複雑になるにつれて数も大きくなる
最後の正の整数解の構成
- 出発有理点で接線を引いて新しい点を得て、さらにその点で接線を引いて次の点を得る過程を繰り返す
- 数回の接線演算の後でも目標領域にすぐには入らなかったため、追加で1点の座標の符号を変えた点と結んで、別の点を作る
- 最後には、あらかじめ残しておいた「良い」有理点の1つと、先に得た大きな座標の点を結び、ついに目標の緑色領域内の有理点に到達する
- この最終的な有理点を元の変数へ戻し、分母の最小公倍数を掛けて正の整数解を構成する
- 最後の検算で、構成された巨大な整数解が元の絵文字問題の方程式を満たすことを確認する
1件のコメント
Hacker News のコメント
ただし
xのようなものの代わりに ふわふわの雲 や星のような名前を使った。子どもたちはイライラしつつも興味は保ち、後には友だちを手伝うときに同じことをしたというこうした 抽象化 を初めて学ぶときの感覚は忘れがちだが、
xが特別なのではなく、太陽でも、「猫の総数」のような語句でもよいのだと示すことが重要だっただが、あとで出版されると可読性が本当に悪くなる。「この式で大きな役割を持つ項目があるのに、いったい何を意味しているんだ? 誰かが
φと名付けたせいで分からない」という状況になるプログラマーが命名下手だと思うなら数学者を見るべきだ、と冗談を言ったりする。数学者は名前を付けられない能力に妙な誇りを持っている
最悪なのは数学論文からそのまま派生したプログラムだ。変数に 相関係数 が入っているなら、そう呼べばいい。アイデアを共有するために何千年分もの言語と表記があるのだから、それを暗号化して
rhoと呼ぶなということところが実際にはこうなった: https://chatgpt.com/share/682cce62-c53c-8003-be2c-2929395868...
要約すると、モデルは自信ありげに推測値を出し、計算し、間違っていると判断してはまた試し続け、同じ推測さえ繰り返した。対称性 をまったく見抜けず、完全に構造を持たないエージェントのように振る舞っていた
最終的にはこのパズルには解がないと強く断定したが、今後のパズルでもモデルがこれほどひどい挙動をするなら、自分の信念を修正しなければならない
ChatGPT o3 にも聞いてみたところ、11.5分 考えていた: https://chatgpt.com/share/682d0993-db4c-8004-a66c-3908ef7203...
Wolfram Alpha に接続される ChatGPT のバージョンがなかっただろうか? それを試したのか気になる
さらに多くの文脈と関連例はこちら: https://x.com/TheOisinMoran/status/1299124512240398336
どの変数がどこで使われているかを追跡するのがずっと簡単になり、コードの純粋な構造を一目で把握しやすくなる。以前投稿した例はこちら: https://imgur.com/F27ZNfk
残念ながら Rust や JS のような現代的な言語のほとんどは XID_Start/XID_Continue 勧告に従っているが、個人的にはその動機がそれほど強固には見えず、すべての 絵文字文字 を識別子から除外している
4の代わりに別の定数を使うと、最小解が 本当に巨大な数 になり得る: https://observablehq.com/@robinhouston/a-remarkable-diophant...人々が言い争うほど簡単に混乱する部分があるのか、それとも誰もが急いで物知り顔をしたくなるほど簡単な問題なのか?
私は
10, 4, 2になったが、もしかすると自分が混乱しているのかもしれないだから
1 + 10 + 3と解釈できそうに見える