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

まずは深い洞察の格言を.
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にしたら勝ちになる.

例えば相手が3を取って,あなたが6を取ったとしよう (上の画像の青が相手,オレンジがあなた).次に相手が5を取ったら,相手の合計は8になっているから,あなたは7を取らないと次の相手の番に負けちゃうね.あなたが7を取ると,あなたの合計は13だから,相手は次に2を取るでしょう.
手番 | 相手 | あなた | 理由 |
---|---|---|---|
1 | 3 | – | – |
2 | – | 6 | – |
3 | 3, 5 | – | – |
4 | – | 6, 7 | 相手の (3, 5) の合計が8だから |
5 | 3, 5, 2 | – | あなたの (6, 7) の合計が13だから |
6 | – | 6, 7, 8 | 相手の (2, 5) の合計が7だから |
7 | 3, 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件のコメント