モナド
2024/07/17
数学モナドとは
モナドは、もともとライプニッツが提唱した哲学上の概念で、現在ではしばしば圏論やプログラミングの文脈で用いられる。
モナド(哲学)
哲学におけるモナドは、単子と訳され、それ以上分割できない単一の実体。アトムとは異なり、空間的な広がりを持たず、それ故に物質ではないとされている。
モナドは「状態」を持っており、その「状態」は他のすべてのモナドの状態を反映して決まる(表象能力)。モナド同士は互いに独立していて他のモナドからの影響を一切受けないため、他のモナドの「状態」との対応(表象能力)については予定調和の原理によって説明されるとのこと。詳細についてはモナドロジーを参照されたい。
単一の実体は表象を通して外界へつながっていて、以下のようなイメージで表現できる。
モナド(圏論)
圏論におけるモナドは、モノイドに似た構造を持つ自己関手の一つ。モナドは圏上の自己関手と2つの自然変換との組のことで、
以下の可換図式を満たす。
ここで、と、との違いについて補足しておく。はを関手で移したものである(1)。はを一塊とした自然変換の成分、すなわち、のをで置き換えたもの(2)。はを関手で移したものである(3)。はを一塊とした自然変換の成分、すなわち、のをで置き換えたもの(4)。
また、「モナドは自己関手圏におけるモノイド対象」と表現されることもある。これは、「モナドは、自己関手を対象、自然変換とを射、関手の合成を演算とした圏を考えたときの、モノイドの性質を持った対象のこと。より正確にはモノイド対象と表現され、モノイド圏が与えられた時の圏の対象と乗法、単位射と呼ばれる2つの射の組のこと。」と言い換えられる。なお、モノイド対象は、以下の可換図式を満たす。
モナド(関数型プログラミング)
関数型プログラミングでは、圏はたかだか集合論の範囲に限定されるため、以下のように読み替えても構わない。
関数型プログラミングにおけるモナドは、裸の値(あるいは型)に文脈を付与するための箱(入れ物)のようなもので、どんな文脈を持ったものでも、箱に入れたまま統一的に扱えるようにしたデザインパターン。これにより、メソッド内の副作用を文脈として値自身に付与することで、参照透過性を維持したまま副作用の扱うことが可能になる。