범주 이론과 추상 대수는 함수가 다른 함수와 결합 될 수있는 방법을 다룹니다. 복잡성 이론은 함수가 얼마나 어려운지를 다루고 있습니다. 나는 그들이 자연스럽게 짝을 이루는 것처럼 보이기 때문에 아무도이 연구 분야를 결합시키는 것을 보지 못했다는 것이 이상합니다. 아무도 전에 이것을 한 적이 있습니까?
동기를 부여하는 예로서, monoid를 살펴 보자. 연산이 모노 이드이면 연산을 병렬화 할 수 있다는 것은 잘 알려져 있습니다.
예를 들어, Haskell에서 덧셈이 다음과 같은 정수에 대한 단일체임을 간단히 정의 할 수 있습니다.
instance Monoid Int where
mempty = 0
mappend = (+)
이제 0에서 999의 합을 계산하려면 다음과 같이 순차적으로 수행 할 수 있습니다.
foldl1' (+) [0..999]
또는 우리는 그것을 동시에 할 수 있습니다
mconcat [0..999] -- for simplicity of the code, I'm ignoring that this doesn't *actually* run in parallel
그러나이 monoid를 병렬화하는 것은 mappend가 일정한 시간에 실행되기 때문에 의미가 있습니다. 그렇지 않은 경우 어떻게합니까? 예를 들어 목록은 mappend가 일정하지 않은 시간 (또는 공간!)으로 실행되지 않는 모노 아이드입니다. 이것이 Haskell에 기본 병렬 mconcat 기능이없는 이유입니다. 최선의 구현은 단일체의 복잡성에 달려 있습니다.
이 두 monoid의 차이점을 설명하는 편리한 방법이 있어야합니다. 그런 다음 이러한 차이점으로 코드에 주석을 달 수 있고 프로그램이 모노 이드의 복잡성에 따라 사용할 최상의 알고리즘을 자동으로 선택하도록해야합니다.