群型クラスと群インスタンス
-- 群型クラス
class Group a where
gappend :: a -> a -> a
gempty :: a
ginv :: a -> a -- inverse
-- 群インスタンスの例
instance Group Int where
gappend = (+)
gempty = 0
ginv = negate
ひとまず群型クラスとGroup Int型の定義のみを並べてみました。
群の満たす法則は
- 結合律
- 単位元律
- 逆元の法則
でした。
それぞれ
gappendgemptyginv
が対応していて、Groupのgappendとgemptyは
このMonoidのmappendとmemptyと同一のものです。※1
そう、モノイド(Monoid)に逆元の存在(ginv)を足した構造が群でした!
※1
今回の群インスタンスの例は、半群, モノイドと違い
演算が(+)、単位元が0になっています。
整数集合には5の逆元がないから、
((*), 1)は群にはなれないのです!
(
5 * 0.2 = 0.2 * 5 = 1
にはなりますが、0.2は整数ではありません!
)