分類より同一視に知性が現れる

最終更新日

まずは深い洞察の格言を.

Mathematics is the art of giving the same name to different things.

An interview with Henri Poincaré (Ferdinand Verhulst, 2012)

足し算ゲームの必勝法は?

あるゲームを考えよう.1から9までの数字を2人で1つずつ交互に取っていって,先に3つの数の合計を15にしたほうが勝利となるゲーム.ゲームが進めば4つ以上の数を取ることになるけど,「3つの数」の合計を15にしないといけない.4つの数の合計が15ではダメだし,逆に2つの数の合計が15でもダメ.取った数のうちどれでもいいので,どれか 3つの数の合計を15にしたら勝ちになる.

P vs. NP – The Biggest Unsolved Problem in Computer Science – YouTube

例えば相手が3を取って,あなたが6を取ったとしよう (上の画像の青が相手,オレンジがあなた).次に相手が5を取ったら,相手の合計は8になっているから,あなたは7を取らないと次の相手の番に負けちゃうね.あなたが7を取ると,あなたの合計は13だから,相手は次に2を取るでしょう.

手番相手あなた理由
13
26
33, 5
46, 7相手の (3, 5) の合計が8だから
53, 5, 2あなたの (6, 7) の合計が13だから
66, 7, 8相手の (2, 5) の合計が7だから
73, 5, 2, 1あなたの (6, 8) の合計が14だから
こんな進行のとき,あなたが次に取る数は?

このゲーム,思ったよりも難しいよね.適当にやってるといつの間にか負けてたり,逆にいつの間に勝ってたりしちゃいそう.勝敗条件は単純なんだけど,手番が進むと考慮すべき組み合わせが増えるから,手番が進むに従ってややこしくなっていく.面白いと思ったらぜひ友達と遊んでみてね (?).

もっと簡単なバージョン

一見するとかなり複雑なこの足し算ゲームは,実はすごくシンプルなゲームに置き換えることができる.9個の数を直線に並べる代わりに,下に示すような魔方陣に並べてみよう.この3×3 の魔方陣は,縦横斜めのどの3つの数の合計も15になってる (2, 3通り計算してみよう!)

魔方陣に並べると?

縦横斜めのどの3つの数の合計も15になってるから,9個の数から3つを選んで合計を15にすることと,魔方陣から縦横斜めのどれか1列を選ぶことは,本質的に同じこと.だから足し算ゲームは,この魔方陣の縦横斜めのどれか1列を揃えるゲームだと言い換えることができるね.3×3 の盤上から交互にマスを取り合って,3つが並んだら勝ちになるゲーム… これってマルバツゲームと同じだ.

足し算ゲームはマルバツゲームと本質的に同じ!

足し算ゲームとマルバツゲームは,実は完全に同じもの.完全に同じだから,マルバツゲームに勝つための戦略を使えば,足し算ゲームにも勝つことができる!複雑そうに見えた足し算ゲームは,実はすごく馴染み深いシンプルなゲームと本質的に同じだったんですね.

異なるものを同一視する

一見すると異なるものの背後にある抽象的な構造を括り出して,実は本質的には同じものだと見抜くのは難しい.反対に、表面的な違いを見て「あぁ,これとこれは違うね」と区別するのはすごく簡単だ.この「異なるものを同一視する」という営みにこそ,知性が現れるのではと最近思う.

その最たる例が数学だ.冒頭に引用したポアンカレの格言 “Mathematics is the art of giving the same name to different things.” は、日本語にするなら「数学とは,異なるものを同じものと見なす技術である」みたいな意味.数学は異なるものを同一視しまくるから高度に抽象的だけど,だからこそ科学のあらゆる場面 (物理 / 化学 / 生物 / 経済 / …) で役に立つ普遍性を持っているわけだ.

容疑者Xの献身』にもよく似た話が登場する.「面積を求めよ」みたいな図形問題も,実は解析的に (つまり関数の問題として) 再解釈できたりする.なぜなら,背後にある “抽象的な構造” が共通だからだ.ちなみに、上に載せた足し算ゲームとマルバツゲームの話も、実は数学に関する YouTube 動画からの引用なのでした。

すると湯川はまた少し口元を緩めた。「草薙から面白い話を聞いた。君の試験問題の作り方についてだ。思い込みによる盲点をつく。たとえば幾何の問題に見せかけて、じつは関数の問題である、とか。なるほどと思った。

容疑者Xの献身

格言の実践的意味

具体的にどんな状況で僕が「分類より同一視に知性が現れるなあ」と思ったのかを書くのは憚られるので,近い事例を引用しよう.僕の好きな Rui さんが,自作 C コンパイラ “chibicc” のコードを解説する動画での発言.

人間,分類が好きなので (…) 階層構造を作っちゃいがちなんですね.

階層構造自体は「正しい」んですけど (…) 分類学になりがちなんで,あえて分類しないという風にして,考えることを減らしてます.

chibiccのコード紹介 – YouTube (省略/改行 著者)

ソフトウェアの設計において,概念の整理が必要な場面には頻繁に遭遇する.概念をランダムに散らかすのは当然悪い発想で,「筋のいい整理」で概念を体系的にまとめる必要がある.でもそのときに,あまり凝りすぎてもよくない.

詳細に,厳密に,分類を深堀りしていくと「あー俺って頭いいなぁ!」という感覚を味わえるかもしれない.でもむしろ必要なことって「一見違いそうなこれらって,実は同じじゃない?」とまとめ上げることなんじゃないかな.

オマケ

面倒だけど頑張って動画を文字起こししたので,せっかくなので書いた分を載せておきます.

大変勉強になる動画

人間,分類が好きなので,

  • 「このノードとこのノードはこの型で表そう」とか.あと,
  • クラス階層とかも作り出すと,
    • 「”二項演算子” という概念を作って,
    • そこから “プラス” と “マイナス” を派生させよう」とか.
  • 「その前に
    • 式と文の区別をするために,”式” っていうのを作って “文” っていうのを作って,
    • そこから “二項演算子” とか “三項演算子” みたいな奴を派生させて,
    • そこからさらに “プラス” とか “マイナス” を派生させていこう」とか.

階層構造を作っちゃいがちなんですね.階層構造自体は「正しい」んですけど,プログラム的には別にあんまりメリットないんで.分類学になりがちなんで,あえて分類しないという風にして,考えることを減らしてます.全く分類されずに全部フラットに入ってるんですけど,なるべく難しくしすぎないというか,あまり凝りすぎないように,全部フラットに入れてます.

1件のコメント

コメントを残す

回れ右の内輪差をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む