1 ポイント 投稿者 GN⁺ 2025-05-22 | 1件のコメント | WhatsAppで共有
  • インターネット上の果物・絵文字の数式パズルの変種を整数ディオファントス方程式として捉え、正の整数解を作るまでの過程を追跡する
  • 核心となる道具は、整数解を直接探すのではなく、まず有理点を見つけ、直線や接線で新しい有理点を生成する幾何学的な方法
  • 変数変換と回転を経た方程式は対称的な楕円曲線になるが、最初に見える簡単な点は、元の問題の正の解にはそのままつながらない
  • 楕円曲線上で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件のコメント

 
GN⁺ 2025-05-22
Hacker News のコメント
  • この問題についての優れた Quora 回答がある: https://www.quora.com/How-do-you-find-the-positive-integer-s...
    • その Quora の投稿は Alon Amit が書いたもので、ちなみに原文も Alon Amit を引用しているので、彼の考えは事後的な解説に近い
  • 関連して、幼い子どもたちに数学を教えたり宿題を手伝ったりするとき、式に書き直したり、その段階に来たら式そのものを書き換えたりしていた
    ただし x のようなものの代わりに ふわふわの雲 や星のような名前を使った。子どもたちはイライラしつつも興味は保ち、後には友だちを手伝うときに同じことをしたという
    こうした 抽象化 を初めて学ぶときの感覚は忘れがちだが、x が特別なのではなく、太陽でも、「猫の総数」のような語句でもよいのだと示すことが重要だった
    • 数学の文化には ミニマリズム があり、式を投げ込んで変形するときには、すべてをできるだけ短くしておくのが役に立つという点はある程度理解できる
      だが、あとで出版されると可読性が本当に悪くなる。「この式で大きな役割を持つ項目があるのに、いったい何を意味しているんだ? 誰かが φ と名付けたせいで分からない」という状況になる
      プログラマーが命名下手だと思うなら数学者を見るべきだ、と冗談を言ったりする。数学者は名前を付けられない能力に妙な誇りを持っている
      最悪なのは数学論文からそのまま派生したプログラムだ。変数に 相関係数 が入っているなら、そう呼べばいい。アイデアを共有するために何千年分もの言語と表記があるのだから、それを暗号化して rho と呼ぶなということ
  • これを ChatGPT に投げてみた。標準の OpenAI インターフェイスに画像だけをアップロードし、モデルがすでに問題を知っていて正解を出すか、幻覚で答えを作るか、あるいは問題を解くのを完全に拒否するだろうと予想していた
    ところが実際にはこうなった: https://chatgpt.com/share/682cce62-c53c-8003-be2c-2929395868...
    要約すると、モデルは自信ありげに推測値を出し、計算し、間違っていると判断してはまた試し続け、同じ推測さえ繰り返した。対称性 をまったく見抜けず、完全に構造を持たないエージェントのように振る舞っていた
    最終的にはこのパズルには解がないと強く断定したが、今後のパズルでもモデルがこれほどひどい挙動をするなら、自分の信念を修正しなければならない
    • Gemini の結果はこちら: https://g.co/gemini/share/ab287b25648f
      ChatGPT o3 にも聞いてみたところ、11.5分 考えていた: https://chatgpt.com/share/682d0993-db4c-8004-a66c-3908ef7203...
    • 印象的だ。仮に「人間が頭の中で計算したり理解したりできる数」を合理的な解と定義するなら、確かに 合理的な解 は存在しない
      Wolfram Alpha に接続される ChatGPT のバージョンがなかっただろうか? それを試したのか気になる
  • 「Sridhar Ramesh という人」だなんて、Sridhar はフォローする価値のある達人だ。数学の博士でありながら、同時にクソ投稿でも博士級という人はそう多くない
  • こういうジャンルが本当に好きだ。自分では「Dantzig Sniping」と呼び始めていて、自作したものも一つある: https://x.com/TheOisinMoran/status/1298305686082744320
    さらに多くの文脈と関連例はこちら: https://x.com/TheOisinMoran/status/1299124512240398336
    • Gdańsk、つまり Danzig に由来する名前だと思って、そこで何が狙撃されたのか気になっていた
    • こういう性質を持つ問題はどうやって見つけるのか気になる
  • 2025年なのに、なぜ著者は変数名に実際の 果物の絵文字 を使わないのだろう?
    • 複雑な C コードベースを理解しようとするとき、既存の変数を絵文字に置き換えると役に立つことが多かった
      どの変数がどこで使われているかを追跡するのがずっと簡単になり、コードの純粋な構造を一目で把握しやすくなる。以前投稿した例はこちら: https://imgur.com/F27ZNfk
      残念ながら Rust や JS のような現代的な言語のほとんどは XID_Start/XID_Continue 勧告に従っているが、個人的にはその動機がそれほど強固には見えず、すべての 絵文字文字 を識別子から除外している
    • Gemini が作った C# の解法で、果物の絵文字変数を使って問題を解いていた。おそらく 総当たり だと思う: https://imgur.com/a/cC5QPH0
    • 今年は2025年だが、その言語が作られた年はおそらく2025年ではない
  • 4 の代わりに別の定数を使うと、最小解が 本当に巨大な数 になり得る: https://observablehq.com/@robinhouston/a-remarkable-diophant...
    • 1億2000万桁の数字を小さな textarea の中で必要なときに読み込むという、ばかばかしくも壮大なやり方が本当に好きだ
  • その問題が最初に出たときのことを覚えている。整数論セミナー でみんな大笑いした
  • 整数論の深いところや奇妙なグラフにまで掘り下げるのはいいのだが、元のリンゴ/バナナのパズルで、いったい何が難しかったり紛らわしかったりするよう意図されていたのか分からない
    人々が言い争うほど簡単に混乱する部分があるのか、それとも誰もが急いで物知り顔をしたくなるほど簡単な問題なのか?
    私は 10, 4, 2 になったが、もしかすると自分が混乱しているのかもしれない
    • 「トリック」は最後の束には バナナが3本 しかなく、ほかの束には4本あるという点だ。同様に、最後の式にはココナッツが1つしかない
      だから 1 + 10 + 3 と解釈できそうに見える