लेफ्ट एंड राइट ऐडजैंट्स में कंटीन्यूएशन मोनाड को कैसे फैक्ट करें?


11

जैसा कि स्टेट मोनड को प्रोडक्ट (लेफ्ट - फनकार) और रीडर (राइट - रिप्रजेंटेबल) में फैक्टर किया जा सकता है।

  1. कंटिन्यूएशन मोनाड को फैक्ट करने का एक तरीका है? नीचे कोड मेरी कोशिश है, जो टाइप चेक नहीं करेगा
-- To form a -> (a -> k) -> k
{-# LANGUAGE MultiParamTypeClasses, TypeOperators, InstanceSigs, TypeSynonymInstances #-}
type (<-:) o i = i -> o
-- I Dont think we can have Functor & Representable for this type synonym

class Isomorphism a b where
   from :: a -> b
   to :: b -> a

instance Adjunction ((<-:) e) ((<-:) e) where
   unit :: a -> (a -> e) -> e
   unit a handler = handler a

   counit :: (a -> e) -> e -> a
   counit f e = undefined -- If we have a constraint on Isomorphism a e then we can implement this
  1. क्या वामपंथी और अधिकार संगठनों की एक सूची है जो मठ बनाते हैं?

  2. मैंने पढ़ा है कि, एक जोड़ी विशेषण दिया है, वे एक अनोखा मोनाद और कोमोनॉड बनाते हैं लेकिन, एक मोनाड को देखते हुए, इसे कई कारकों में वर्गीकृत किया जा सकता है। क्या इसका कोई उदाहरण है?

जवाबों:


11

यह टाइपकास्ट नहीं करता है क्योंकि वर्ग Adjunctionकेवल सहायक के एक छोटे उपसमूह का प्रतिनिधित्व करता है, जहां दोनों फंक्शंस हास्क पर एंडोफुन्क्टर हैं

जैसा कि यह पता चला है, यह आसन्न के लिए मामला नहीं है (<-:) r -| (<-:) r। यहाँ दो अलग अलग प्रकार के फंक्शंस हैं:

  • f = (<-:) rHask से Op (Hask) के लिए फ़न्क्टर (Hask के विपरीत श्रेणी, कभी-कभी Hask सेशन भी निरूपित)
  • g = (<-:) rअंतिम संस्कार Op (Hask) से Hask तक

विशेष रूप से, counitOp (Hask) श्रेणी में एक प्राकृतिक परिवर्तन होना चाहिए, जो चारों ओर तीर चलाता है:

unit   :: a -> g (f a)
counit :: f (g a) <-: a

वास्तव में, इस आसन्न के counitसाथ मेल खाता है unit

इसे ठीक से पकड़ने के लिए, हमें Functorऔर Adjunctionवर्गों को सामान्य बनाने की आवश्यकता है ताकि हम विभिन्न श्रेणियों के बीच के बदलावों को मॉडल कर सकें:

class Exofunctor c d f where
  exomap :: c a b -> d (f a) (f b)

class
  (Exofunctor d c f, Exofunctor c d g) =>
  Adjunction
    (c :: k -> k -> Type)
    (d :: h -> h -> Type)
    (f :: h -> k)
    (g :: k -> h) where
  unit :: d a (g (f a))
  counit :: c (f (g a)) a

फिर हम फिर से मिलते हैं कि Composeएक सन्यासी है (और यदि हम आसन्न पलटें तो एक कोमोनड):

newtype Compose f g a = Compose { unCompose :: f (g a) }
adjReturn :: forall c f g a. Adjunction c (->) f g => a -> Compose g f a
adjReturn = Compose . unit @_ @_ @c @(->)

adjJoin :: forall c f g a. Adjunction c (->) f g => Compose g f (Compose g f a) -> Compose g f a
adjJoin = Compose . exomap (counit @_ @_ @c @(->)) . (exomap . exomap @(->) @c) unCompose . unCompose

और Contइसका केवल एक विशेष मामला है:

type Cont r = Compose ((<-:) r) ((<-:) r)

अधिक जानकारी के लिए यह भी देखें: https://gist.github.com/Lysxia/beb6f9df9777bbf56fe5b42de04e6c64


मैंने पढ़ा है कि एक जोड़ी विशेषण दिए गए हैं, वे एक अद्वितीय मोनाड और कोमोनड बनाते हैं, लेकिन एक मोनाड दिया गया जिसे कई कारकों में वर्गीकृत किया जा सकता है। क्या इसका कोई उदाहरण है?

आमतौर पर गुणनखंड अद्वितीय नहीं है। एक बार जब आपने ऊपर के अनुसार adjunctions को सामान्य कर लिया है, तो आप किसी भी Mमोनाड को उसके क्लेइस्ली श्रेणी और उसके बेस श्रेणी (इस मामले में, Hask) के बीच के संयोजन के रूप में कम से कम कर सकते हैं ।

Every monad M defines an adjunction
  F -| G
where

F : (->) -> Kleisli M
  : Type -> Type                -- Types are the objects of both categories (->) and Kleisli m.
                                -- The left adjoint F maps each object to itself.
  : (a -> b) -> (a -> M b)      -- The morphism mapping uses return.

G : Kleisli M -> (->)
  : Type -> Type                -- The right adjoint G maps each object a to m a
  : (a -> M b) -> (M a -> M b)  -- This is (=<<)

मुझे नहीं पता है कि निरंतरता के लिए हाड पर एंडोफुन्क्टरों के बीच एक संयोजन से मेल खाता है या नहीं।

Nadatabab लेख को भिक्षुओं पर भी देखें: https://ncatlab.org/nlab/show/monad#RelationToAdjunctionsAndMonadicity

सहायक और अद्वैतवाद का संबंध

हर adjunction (L) R) एक मोनड R andL और एक कॉमनॉड LRR को प्रेरित करता है। एक से अधिक स्थापन सामान्य तौर पर होते हैं, जो किसी दिए गए संन्यासी को जन्म देता है, वास्तव में किसी दिए गए संन्यासी के लिए आसन्न की एक श्रेणी है। उस श्रेणी में प्रारंभिक वस्तु मोनाड के क्लेसीली श्रेणी के ऊपर है और टर्मिनल वस्तु एल्जेब्रास के इलेनबर्ग-मूर श्रेणी के ऊपर है। (उदाहरण के तौर पर बोरसेक्स, खंड 2, सहारा। 4.2.2) उत्तरार्द्ध को मौद्रिक स्थापन कहा जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.