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

最終更新日

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

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––
2–6–
33, 5––
4–6, 7相手の (3, 5) の合計が8だから
53, 5, 2–あなたの (6, 7) の合計が13だから
6–6, 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件のコメント

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

コメントする