모나드 (범주론)

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

범주론에서, 모나드(영어: monad)는 자기준동형펑터(endofunctor) 범주의 모노이드다.

정의[편집]

C범주라고 하자. 그렇다면 자기준동형펑터(endofunctor) C\to C들을 대상으로 하고, 이들 사이의 자연 변환들을 사상으로 하는 범주 \operatorname{End}_C를 생각하자. \operatorname{End}_C모노이드 범주(monoidal category)이며, 따라서 \operatorname{End}_C 속의 모노이드를 생각할 수 있다. \operatorname{End}_C의 모노이드를 C모나드라고 한다.

구체적으로, 모나드는 다음과 같은 데이터로 이루어져 있다.

이들은 다음 두 도형을 가환되게 하여야 한다.

Monad multiplication explicit.svg              Monad unit explicit.svg

첫 번째 공리는 모노이드의 결합법칙을 나타내고, 두 번째 공리는 모노이드 항등원의 존재를 나타낸다.

[편집]

모나드의 대표적인 예는 닫힘 연산자이다. 위상공간 X의 집합들과 그 포함관계들의 범주 \mathcal P(X)를 생각하자. 그렇다면 닫힘 연산자 \operatorname{cl}\colon\mathcal P(X)\to\mathcal P(X)는 펑터를 이루며, 또한 다음과 같은 자연 변환들이 존재한다.

  • (\eta) S\subset\operatorname{cl}(S)
  • (\mu) \operatorname{cl}(\operatorname{cl}(S))=\operatorname{cl}(S)

이들은 모나드 공리들을 만족시킨다. 따라서 닫힘 연산자는 \mathcal P(X)의 모나드다.

응용[편집]

하스켈 등 함수형 프로그래밍 언어에서 입출력 및 데이터 구조를 다룰 때 쓰인다.