코로나 드와 펑터 사이에 공-응용 펑터와 같은 개념이 있습니까?


17

모든 모나드는 또한 적용되는 functor이고 모든 적용되는 functor는 functor입니다. 또한, 모든 코모 나는 펀터입니다. 코 모나드와 펑터 사이에 유사한 개념이 있습니까? 공동 적용 펑터와 같은 것이 있으며 그 속성은 무엇입니까?

FunctorsFunctors↑↑Applicative functors???↑↑MonadsComonads

업데이트 : 나는 그러한 개념의 가능한 사용에 관심이 있습니다.


당신이 코 모나드를 찾고 있지 않습니까-> ??? -> 보조 기능?
— josiah

1
@josiah 아니요, 제가 아는 한, 코모 나는 코 펀터가 아닌 펑터 입니다.
— Petr Pudlák

1
아닌가 나눌 조각 누락이?
— 거스

답변:


15

가장 먼저:

모든 모나드는 또한 적용되는 functor이고 모든 적용되는 functor는 functor입니다.

이것은 하스켈의 맥락에서 사실이지만, Applicative일반적으로 그렇지는 않지만 ( "강력한 일 축성 functor"라고 읽음), 모나드 (및 코 모나드)가 endofunctors 인 반면에 다른 일관된 범주 사이에 "적용 가능한"펑터를 가질 수있는 사소한 이유 때문에 .

또한, Applicative이름 (및 타입 시그니처 (<*>)) 을 정당화하기 위해서는 폐쇄 된 단일체 범주 사이 에서 단일체 구조 와 내부 호모를 모두 보존하는 기능이 필요 하기 때문에 강력한 lax monoidal functors로 식별 하는 것은 약간 잘못된 것 입니다. 이것은 어느 한쪽의 속성을 보존하는 단일체 닫힌 범주 사이의 functor가 다른 하나를 명백한 방식으로 보존한다는 점을 제외하고는 "lax closed monoidal functor"라고 할 수있다 . 의 단일체 구조를 보존하는 Hask의Applicative endofunctor 만 설명 하기 때문에 인스턴스는 강도를 포함하여 많은 속성을 자동으로 얻습니다 .(,)

명백히 관련 은 그들의 각각의 모노 이드 구조의 측면이 일치하게하는 것에 Monad대한 암시 적 한계의 인공물이며, Applicative불행히도 이원화에서 살아남지 않는 행복한 우연의 일치이다.

카테고리에 comonad 것처럼 에 모나드 인 C O P는 , oplax monoidal 펑 C → D가 느슨한 monoidal 펑 인 C O P → D O P . 그러나 H는 S K O P는 monoidal되지 폐쇄 및 공동 하지 않는 장점이 거의 이름 기능 프로그램을 포함한다. 어쨌든 결과는 그리 흥미롭지 않을 것입니다.씨씨영형피 씨→디씨영형피→디영형피Hㅏ에스케이영형피Applicative

class (Functor f) => CoMonoidal f where
    counit :: f () -> ()
    cozip :: f (a, b) -> (f a, f b)

대신 "colax closed functor"라는 개념을 상상할 수 Applicative있습니다. 불행히도, 폐쇄 카테고리 (본인이 아는) 전혀 아니다 : 에 H S K 대응 morphisms에 B → 에서 H S KHㅏ에스케이영형피newtype Op b a = Op (a -> b)Hㅏ에스케이비→ㅏ ,하지만int로서 일을하지 않습니다 화살표가 뒤집혀 있기 때문에 대신 어떤 종류의 기능이 필요할 것이므로Hask에대해서는 일반적으로 정의 할 수 없습니다.Hㅏ에스케이영형피Op b aHㅏ에스케이

Hㅏ에스케이Applicative

class (Functor f) => CoApplicative f where
    copure :: f a -> a
    coap :: (f a -> f b) -> f (a -> b)

추가 duplicate :: f a -> f (f a)할 copurecomonad 생산하는 것입니다 물론, (법칙을 가정하고 만족하고 있습니다). 그러나 어떤 coap것이 든 간에 -와는 분명한 관계가 없습니다 extend :: (f a -> b) -> f a -> f b. 는 이중화는 다른 방법으로 일어나고있는 것이 분명하게 유형을 비교하십시오 comonoidal 구조는 기본 duplicate과 cozip서로 또는과 거의가 coap(아마 어쨌든 이해가되지 않는)를, 반면 liftA2 (,)과 (<*>)동일으로부터 유도 할 수있다 join.

Applicative코 모나드와 관련이없는 이원화 의 또 다른 가능한 방법은 반 변형 일 측성 펑터를 고려하는 것입니다.

class (Contravariant f) => ContraMonoidal f where
    contraunit :: f a
    contrazip :: f a -> f b -> f (Either a b)

그러나 이것은 위와 동일한 문제, 즉 Hㅏ에스케이영형피b <~ acontracurry :: (Either c b <~ a) -> (c <~ (b <~ a))contraapply :: b -> Either a (a <~ b)

기억이 나에게 봉사한다면, 여기의 장애물은 하스켈에만 국한된 것이 아니라 오히려 Hㅏ에스케이CoApplicative

그러나, 이원화에 더 적합한 단일체 폐쇄 형 범주에서는 더 나은 운이있을 수 있습니다. 특히, 나는 Kleisli (Cont r)그와 그 반대의 범주가 모두 단일체 폐쇄적 이라고 믿기 때문에 이러한 아이디어를 탐구하는 것이 더 나은 맥락 일 수 있습니다.


cstheory.stackexchange.com/a/22302/989에 대한 답변을 비교하면 제품을 합계로 이중화하지 않는 것이 놀랍습니다. 물론 Hask에는 범주 합계가없는 것이 맞습니다. 그러나 전체 프로그램 범주 (Agda와 같은)로 제한하려는 경우 지금 설정되어 있다고 가정 해 봅시다. 문제가 사라집니다. (나는 Set ^ op이 일회성 폐쇄라고 말하지는 않지만 내가 말하는 것이 그것을 의미한다고 생각합니다).
— Blaisorblade

8

에서 SO에이 게시물 - I 흥미로운 대답을 발견 결정적인 펑터 . 우리가 바꿀 경우 ()로 Void, (,)로 Either 와 화살표를 반전, 우리가 얻을 :

class Functor f => Decisive f where
    nogood :: f Void -> Void
    orwell :: f (Either s t) -> Either (f s) (f t)

블로그 포스트는 또한 결정적인 펑터가 준수하는 몇 가지 법률을 제공합니다.

그리고 모든 Comonad것은 또한 Decisive:

instance Comonad c => Decisive c where
    nogood = counit
    orwell story = case counit story of
                     Left s  -> fmap (either id (const s)) story
                     Right t -> fmap (either (const t) id) story 

따라서 결정형 펑 터는 펑터와 모나드 사이에 적용되는 것처럼 펑터와 코모 나 사이에 적합합니다.


6

McBride와 Patterson (섹션 7)은 관용구로도 알려진 관용 functor 가 강력한 lax monoidal functor 임을 보여줍니다 . 강력한 colax monoidal functor를 찾고 있습니다. 강력한 oplax의 monoidal 펑터 . 의견에서 언급했듯이, oplax monoidal functor는 반대 범주 사이의 lax monoidal functor입니다.

다이어그램을 그리고 화살표를 뒤집으십시오!

세부 정보를 확인하고 세부 정보를 확인하고 기능적 프로그래밍 개념으로 변환하는 데 약간의 시간이 필요했습니다.


어떤 이유로 표준 용어는 "oplax monoidal functor"로 보인다. 아이디어는 반대 범주 사이의 lax monoidal functor이며, 결국 lax monoidal functor의 comonoidal 버전입니다. "colax comonoidal"사용은 중복되거나 "lax monoidal"과 동일합니다.
— CA McCann

나는 "공동"을 무시했다. 나는 대답을 고칠 것이다.
— Dave Clarke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.