Monad, Adjunction, Yoneda를 공부하면서 비슷하게 쓰인 것 같은, 아이디어 조각이 보여 정리해 봤습니다. 너무 일반적으로 쓰이는 생각이어서 하나 마나한 얘기일 수 있습니다. 각 개념들의 근본 생각이 아니라, 이론을 쫓아가는 과정에서 보이는 작은 도구같은 아이디어에 관한 얘기입니다. (세 개념을 이미 공부한 적이 있는 분을 대상으로 하는 글입니다)
“하나의 개념으로 보이는 걸, 여러 단계로 쪼개서 보면 새로운 일이 일어난다.”
(하나인 줄 알았던 게, 사실은 여러 절차로 이루어져 있던 겁니다)
하나의 동작으로만 보였던 모노이드의 이항 연산을
M∘M
)join
)로 쪼개서 보고 있습니다.
Adjunction을 만드는 두 Adjoint 펑터로 모나드 표현하기
두 카테고리가 동형, 혹은 동형 비슷한가?..라는 문장에는
F:C->D
, G:D->C
존재하고,G∘F
가 Id_C
와 같아지는 방법이 있어야 하고,F∘G
가 id_D
와 같아지는 방법이 있어야 한다.가 포함되어 있습니다.
동형이라는 조건을 여러 개로 쪼개서, 그 중 일부만 만족할 때를 보고 있습니다.
홈펑터Hom Functor와 요네다 보조 정리Yoneda lemma
Monad, Adjunction 까지 그렇구나 하고 있었는데, 문득 Yoneda에도 비슷한 구석이 보였습니다.
값을 기준값과 컴퓨테이션으로 쪼개서 보고 있습니다. 예를 들면, 1
은 기준값 0
과 (+1)
로 쪼개어 봅니다. 그동안 다루던 값에는 기준값이라는 정보가 암묵적으로 들어 있는 컴퓨테이션이었다고 볼 수 있습니다. (자로 거리를 잰다면, 기준값 어디서부터 잰다고 할 때 그 기준값입니다.)
아주 직관적으로 보이는 예를 들면,
0
포함 자연수들이 있고, F
가 이들을 (+10)
한 대상과 대응시키고 있을 때, 홈펑터Hom(-,A)
와 F
의 자연 변환을 성분별로 보겠습니다.
홈펑터Hom(-,A)
에서 A
를 0
으로 둔 것과, (A
를 기준값으로 보겠습니다.)
A
를 1
로 둔 것을 보겠습니다.
Hom(-,기준값A) 성분 | F 성분 | 둘 사이의 자연 변환 | F 기준값A |
---|---|---|---|
1 -> 기준값 0 = (-1) | 1 (+10) | -1+11= (+10) | 10+기준값 0 = 10 |
2 -> 기준값 0 = (-2) | 2 (+10) | -2+12= (+10) | 10+기준값 0 = 10 |
3 -> 기준값 0 = (-3) | 3 (+10) | -3+13= (+10) | 10+기준값 0 = 10 |
… | |||
1 -> 기준값 1 = (-0) | 1 (+10) | -0+11= (+11) | 10+기준값 1 = 11 |
2 -> 기준값 1 = (-1) | 2 (+10) | -1+12= (+11) | 10+기준값 1 = 11 |
3 -> 기준값 1 = (-2) | 3 (+10) | -2+13= (+11) | 10+기준값 1 = 11 |
… |
(+10)이라는 컴퓨테이션
과 (+10)에 기준값 0을 적용한 결과값 10
을 대응시키고 있습니다.
1
일 때는 (+11)
과 11
을 대응하고 있습니다.
기준값이 0
일 때의 펑터 (+10)
과 기준값이 1
일 때의 펑터 (+11)
, 즉 영향을 주는 정보를 튜플로 표현하면(기준값0, (+10))
과 (기준값1,(+11))
은 같은 펑터입니다.
혹은 Adjunction은 단일한 개념으로 보이는 값이란 대상을, 다른 모든 것들과의 관계로 쪼개어 보고 있다고 볼 수도 있습니다.
다시 말하지만, 각 개념들의 근본이 되는 생각에 관한 얘기가 아닙니다. 공통적으로 쓰이는 작은 도구에 관한 얘기입니다. 얼핏 하나의 개념인 걸 잘 쪼개서 보면, 추상화나 일반화가 가능하다든지하는 다른 무언가가 보일 수도 있겠다는… 뭐 그런 얘기입니다. 각 개념들의 증명을 시작할 때, 이런 도구를 쓸 것이다를 알면, 증명을 읽을 때 조금은 도움이 되지 않을까요? 이런 도구들이 몸에 밴다면, 하스켈로 현실을 모델링할 때 써먹을 수 있지 않을까요?