komorebikoboshiのブログ

プログラミング記事(趣味レベル)が多め。

数学の「群」がインターフェースに見えた

前に数学ガールを読んでいるってことを書いたけど、その中で群というものが出てくる。

群の定義(群の公理)
以下の公理を満たす集合を群という。


G1 演算*に関して閉じている。
G2 任意の元に対して、結合法則が成り立つ。
G3 単位元が存在する。
G4 任意の元に対して、その元に対する逆元が存在する。

以上が群の定義で、この条件を満たすものは全て群として扱える。
これは、すごいことだと思う。この条件さえ満たしていれば、それ以外にどんな性質を持っていたとしても群のさまざまな定理に従うのだから。
そしてこれは、プログラミングにおけるインターフェースに似てるなあ、と。(型クラス、っていう方がいいのかなぁ?よく分からない)そのクラスがどんな振る舞いをしようとも、IComparableさえ有ればソートしてやんよ、みたいな。わずか1つのメソッドを実装するだけで、どこかの誰かが作った超高性能なソート関数を自分のクラスでも利用することができる。これも、すごいことだと思う。
群の定義はたった4項しかない。このわずかな道具だけを使って理論を組み立てていく。それは大きな制約かもしれないけど、反面、条件が少ないからこそより多くの対象を扱えるのだと思う。プログラミングのインターフェースも、大抵1つか2つのメソッドを実装するだけで便利機能が扱える。(CurrentとMoveNextを実装するだけでLINQが使い放題に!)*1少ない条件でどうにかしてくれているおかげで使う方は楽をできる。
ちょっと記事のタイトルから話がずれたけど、抽象化された概念を使って物事を組み立てることで、より応用範囲の広い理論やプログラムが作れるんだなあ、とまとめっぽい事を書いておく。テトラちゃんかわいい。*2

*1:yieldを使えばもっと楽チンに

*2:肝心の数学的な内容は全然頭に入ってない。次は数式をじっくり追いながら読もう