एक मोनाड एंडोफुन्क्टरों की श्रेणी में एक भिक्षु है, समस्या क्या है?


722

निम्नलिखित में सबसे पहले किसने कहा था?

एक मोनाड एंडोफुन्क्टरों की श्रेणी में एक भिक्षु है, समस्या क्या है?

और एक कम महत्वपूर्ण नोट पर, क्या यह सच है और यदि आप एक स्पष्टीकरण दे सकते हैं (उम्मीद है कि कोई ऐसा व्यक्ति जो किसी को बहुत हास्केल अनुभव नहीं हो सकता है) समझ सकता है?


14
"काम करने वाले गणितज्ञ के लिए श्रेणियाँ" देखें
डॉन स्टीवर्ट

18
हास्केल में मठों का उपयोग करने के लिए आपको इसे समझने की आवश्यकता नहीं है। व्यावहारिक दृष्टिकोण से वे कुछ भूमिगत पाइपलाइन के माध्यम से "राज्य" के चारों ओर से गुजरने का एक चतुर तरीका है।
स्टारब्ले

1
मैं इस उत्कृष्ट ब्लॉग पोस्ट को यहां भी जोड़ना चाहता हूं: stephendiehl.com/posts/monads.html यह सीधे सवाल का जवाब नहीं देता है, लेकिन मेरी राय में स्टीफन हास्केल में श्रेणियों और मठों को एक साथ बांधने का शानदार काम करता है। यदि आपने उपरोक्त उत्तर पढ़े हैं - तो इसे देखने के दो तरीकों को एकजुट करने में मदद करनी चाहिए।
बेन फोर्ड

3
अधिक सटीक रूप से "किसी भी श्रेणी सी के लिए, उसके एंडोफुन्क्टरों की श्रेणी [सी, सी] की रचना द्वारा एक मोनोइडल संरचना होती है। सी में एक मोनोइड ऑब्जेक्ट, सी पर एक मोनड है।" - en.wikipedia.org/wiki/Monoid_%28category_theory%29 से। श्रेणी सिद्धांत में मोनद की परिभाषा के लिए en.wikipedia.org/wiki/Monad_%28category_theory%29 देखें।

1
@Dmitry एक functor के साथ कुछ कमी अच्छी तरह से व्यवहार हो सकता है, श्रेणियों के बीच एक समारोह है। एक श्रेणी C पर एक एंडोफुन्क्टर, C से स्वयं के लिए एक फनकार है। Data.Functor हास्क श्रेणी पर एंडोफुन्क्टरों के लिए एक टाइपकास्ट है । चूंकि एक श्रेणी में वस्तुओं और आकारिकी शामिल हैं, एक फ़नकार को दोनों को मैप करने की आवश्यकता होती है। Data.Functor की एक उदाहरण f के लिए, ऑब्जेक्ट्स (हैस्केल प्रकार) पर मैप स्वयं f है और मॉर्फिज़्म (हैस्केल फ़ंक्शंस) पर मैप fmap है।
माथिज्स

जवाबों:


795

जेम्स इरी द्वारा विशेष रूप से मनोरंजक, अपने अत्यधिक मनोरंजक ब्रीफ, अपूर्ण और प्रोग्रामिंग भाषाओं के अधिकांश गलत इतिहास से है , जिसमें वह फिलिप वैडलर के लिए काल्पनिक रूप से इसका श्रेय देते हैं।

मूल उद्धरण काम मैथेमेटिशियन के लिए श्रेणियों में सॉन्डर्स मैक लेन से है , जो श्रेणी थ्योरी के संस्थापक ग्रंथों में से एक है। यहां यह संदर्भ में है , जो कि वास्तव में इसका मतलब जानने के लिए सबसे अच्छी जगह है।

लेकिन, मैं एक छुरा ले जाऊंगा। मूल वाक्य यह है:

सभी ने बताया, एक्स में एक सनद एक्स के एंडोफुन्क्टरों की श्रेणी में केवल एक मोनॉयड है, जिसमें उत्पाद × की जगह एंडोफुक्टर्स की रचना और पहचान एंडोफुक्टर द्वारा स्थापित इकाई है।

X यहां एक श्रेणी है। एंडोफुन्क्टर एक श्रेणी से स्वयं के लिए फंक्शनल हैं (जो आमतौर पर सभी प्रकार के Functor कार्यात्मक प्रोग्रामर के रूप में चिंतित हैं, क्योंकि वे ज्यादातर सिर्फ एक श्रेणी के साथ काम कर रहे हैं; प्रकारों की श्रेणी - लेकिन मैं पचाता हूं)। लेकिन आप एक और श्रेणी की कल्पना कर सकते हैं जो " एक्स पर एंडोफुन्क्टर" की श्रेणी है । यह एक ऐसी श्रेणी है जिसमें वस्तुएं एंडोफुन्क्टर हैं और आकारिकी प्राकृतिक परिवर्तन हैं।

और उन एंडोफुन्क्टरों में से, उनमें से कुछ सन्यासी हो सकते हैं। कौन से सन्यासी हैं? वास्तव में लोगों को जो कर रहे हैं monoidal एक विशेष अर्थ में। इसके बजाय मोनाड से मोनॉइड्स तक सटीक मैपिंग को स्पेल करने के बजाय (चूंकि मैक लेन ऐसा करता है कि जहां तक ​​मैं उम्मीद कर सकता था) से बेहतर है, मैं बस उनकी संबंधित परिभाषाओं को एक साथ रखूंगा और आपको तुलना करूंगा:

एक मोनॉयड है ...

  • एक सेट, एस
  • एक ऑपरेशन, •: एस × एस → एस
  • एस का एक तत्व , ई: 1 → एस

... इन कानूनों को पूरा करना:

  • (ए • बी) • सी = ए • (बी • सी) , एस में सभी , बी और सी के लिए
  • ई • एक = एक • ई = एक , सभी के लिए एक में एस

एक भिक्षु है ...

  • एक एंडोफ़नक्टर, टी: एक्स → एक्स (हास्केल में, * -> *एक Functorउदाहरण के साथ एक प्रकार का निर्माता )
  • एक प्राकृतिक परिवर्तन, μ: टी × टी → टी , जहां × का अर्थ है फन्क्टर रचना ( μ को joinहास्केल के रूप में जाना जाता है)
  • एक प्राकृतिक परिवर्तन, natural : मैं → टी , जहां मैं पर पहचान endofunctor है एक्स ( η के रूप में जाना जाता है returnहास्केल में)

... इन कानूनों को पूरा करना:

  • μ ∘ Tμ = μ T μT
  • μ = T 1 = μ ∘ ηT = 1 (पहचान प्राकृतिक परिवर्तन)

थोड़ी सी स्क्विंटिंग के साथ आप देख सकते हैं कि ये दोनों परिभाषाएं एक ही सार अवधारणा के उदाहरण हैं


21
स्पष्टीकरण के लिए धन्यवाद और संक्षिप्त, अपूर्ण और अधिकतर गलत तरीके से प्रोग्रामिंग भाषाओं के इतिहास के लिए धन्यवाद। मुझे लगा कि यह वहीं से हो सकता है। वास्तव में प्रोग्रामिंग हास्य के सबसे महान टुकड़ों में से एक।
रोमन ए। टेचर

6
@ जोनाथन: एक मोनॉइड के शास्त्रीय निर्माण में, × का अर्थ है सेट का कार्टेशियन उत्पाद। आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं: en.wikipedia.org/wiki/Cartesian_product , लेकिन मूल विचार यह है कि S × T का एक तत्व एक युग्म (s, t) है , जहाँ s and S और t ∈ T है । तो मोनॉयडल उत्पाद के हस्ताक्षर •: एस × एस -> इस संदर्भ में एस का अर्थ है एक फ़ंक्शन जो इनपुट के रूप में एस के 2 तत्वों को लेता है और आउटपुट के रूप में एस का एक और तत्व पैदा करता है ।
टॉम क्रोकेट

12
@TahirHassan - श्रेणी सिद्धांत की व्यापकता में, हम सेट के बजाय अपारदर्शी "वस्तुओं" से निपटते हैं, और इसलिए "तत्वों" की कोई पूर्व धारणा नहीं है। लेकिन यदि आप उस श्रेणी के बारे में सोचते हैं जहाँ सेट सेट हैं जहाँ ऑब्जेक्ट्स सेट हैं और एरो फ़ंक्शंस हैं, किसी भी सेट S के तत्व किसी एक-तत्व सेट से एस के कार्यों के साथ एक-से-एक पत्राचार में हैं, जो कि किसी के लिए भी है। S का तत्व e , ठीक एक फ़ंक्शन f: 1 -> S है , जहाँ 1 किसी एक-तत्व सेट है ... (cont'd)
Tom Crockett

12
@TahirHassan 1-तत्व सेट स्वयं "टर्मिनल ऑब्जेक्ट्स" की सामान्य श्रेणी-सिद्धांत संबंधी धारणा के विशेषज्ञ हैं: एक टर्मिनल ऑब्जेक्ट किसी श्रेणी का कोई ऑब्जेक्ट है, जिसके लिए किसी अन्य ऑब्जेक्ट से बिल्कुल एक तीर है (आप इसे देख सकते हैं) इस में 1-तत्व सेट का सच है सेट )। श्रेणी सिद्धांत में टर्मिनल ऑब्जेक्ट को केवल 1 के रूप में संदर्भित किया जाता है ; वे आइसोमॉर्फिज़्म तक अद्वितीय हैं, इसलिए उन्हें अलग करने का कोई मतलब नहीं है। इसलिए अब हमारे पास किसी भी S के लिए " S के तत्वों" का विशुद्ध रूप से श्रेणी-सैद्धांतिक विवरण है : वे केवल 1 से S तक के तीर हैं !
टॉम क्रॉकेट

7
@TahirHassan - इसे हास्केल शब्दों में रखने के लिए, इस तथ्य के बारे में सोचें कि यदि Sकोई प्रकार है, तो आप एक फ़ंक्शन लिखते समय कुछ कर सकते हैं f :: () -> Sकुछ विशेष प्रकार के शब्द S(इसका एक "तत्व", यदि आप करेंगे) और वापस लौटें यह ... आपको तर्क के साथ कोई वास्तविक जानकारी नहीं दी गई है, इसलिए फ़ंक्शन के व्यवहार को अलग करने का कोई तरीका नहीं है। तो fएक निरंतर कार्य होना चाहिए जो हर बार एक ही चीज़ लौटाता है। ()("यूनिट") हास्क श्रेणी का टर्मिनल ऑब्जेक्ट है , और यह कोई संयोग नहीं है कि इसमें ठीक 1 (गैर-विचलन) मूल्य है जो इसका निवास करता है।
टॉम क्रॉकेट

532

सहज रूप से, मुझे लगता है कि फैंसी गणित शब्दावली क्या कह रही है:

monoid

एक मोनोड वस्तुओं का एक समूह है, और उन्हें संयोजित करने की एक विधि है। अच्छी तरह से ज्ञात monoids हैं:

  • नंबर आप जोड़ सकते हैं
  • सूचियाँ जिन्हें आप संक्षिप्त कर सकते हैं
  • सेट आप संघ कर सकते हैं

इसके और भी जटिल उदाहरण हैं।

इसके अलावा, प्रत्येक मोनॉइड की एक पहचान होती है , जो कि "नो-ऑप" तत्व है जिसका कोई प्रभाव नहीं पड़ता है जब आप इसे किसी और चीज़ के साथ जोड़ते हैं:

  • 0 + 7 == 7 + 0 == 7
  • [] ++ [1,2,3] == [1,2,3] ++ [] == [1,2,3]
  • {} संघ {सेब} == {सेब} संघ {} == {सेब}

अंत में, एक monoid साहचर्य होना चाहिए । (आप जब चाहें तब तक संयोजनों की एक लंबी स्ट्रिंग को कम कर सकते हैं, जब तक आप वस्तुओं के बाएं-दाएं-दाएं क्रम को नहीं बदलते हैं) जोड़ ठीक है ((5 + 3) +1 == 5+ (3+) 1)), लेकिन घटाव नहीं है ((5-3) -1! = 5- (3-1))।

इकाई

अब, आइए एक विशेष प्रकार के सेट और वस्तुओं के संयोजन के एक विशेष तरीके पर विचार करें।

वस्तुओं

मान लीजिए कि आपके सेट में एक विशेष प्रकार की वस्तुएँ हैं: कार्य । और इन कार्यों में एक दिलचस्प हस्ताक्षर है: वे संख्याओं को संख्याओं या तारों को तार तक नहीं ले जाते हैं। इसके बजाय, प्रत्येक फ़ंक्शन दो-चरणीय प्रक्रिया में संख्याओं की एक सूची पर ले जाता है।

  1. 0 या अधिक परिणामों की गणना करें
  2. उन परिणामों को किसी एक उत्तर में मिलाएं।

उदाहरण:

  • 1 -> [1] (केवल इनपुट लपेटें)
  • 1 -> [] (इनपुट को त्यागें, सूची में शून्यता लपेटें)
  • 1 -> [2] (इनपुट में 1 जोड़ें, और परिणाम लपेटें)
  • 3 -> [4, 6] (इनपुट में 1 जोड़ें, और इनपुट को 2 से गुणा करें, और कई परिणाम लपेटें )

वस्तुओं का मेल

साथ ही, फ़ंक्शन के संयोजन का हमारा तरीका विशेष है। समारोह गठबंधन करने के लिए एक आसान तरीका है रचना आइए ऊपर हमारे उदाहरण लेते हैं, और साथ ही प्रत्येक कार्य रचना:

  • 1 -> [1] -> [[1]] (इनपुट को दो बार लपेटें)
  • 1 -> [] -> [] (इनपुट को त्यागें, दो बार सूची में शून्यता लपेटें)
  • 1 -> [2] -> [UH-OH! ] (हम सूची में "1" जोड़ नहीं सकते! ")
  • 3 -> [4, 6] -> [UH-OH! ] (हम 1 सूची नहीं जोड़ सकते हैं!)

टाइप थ्योरी में बहुत अधिक होने के बिना, यह है कि आप एक पूर्णांक प्राप्त करने के लिए दो पूर्णांकों को जोड़ सकते हैं, लेकिन आप हमेशा दो कार्यों की रचना नहीं कर सकते हैं और एक ही प्रकार का फ़ंक्शन प्राप्त कर सकते हैं। (प्रकार के साथ कार्य -> ए रचना करेंगे, लेकिन a-> [a] नहीं होगा।)

तो, चलिए कार्यों के संयोजन के एक अलग तरीके को परिभाषित करते हैं। जब हम इनमें से दो कार्यों को जोड़ते हैं, तो हम परिणामों को "डबल-रैप" नहीं करना चाहते हैं।

यहाँ हम क्या करते हैं। जब हम दो कार्यों F और G को जोड़ना चाहते हैं, तो हम इस प्रक्रिया का पालन करते हैं ( बाइंडिंग कहा जाता है ):

  1. एफ से "परिणाम" की गणना करें, लेकिन उन्हें गठबंधन न करें।
  2. परिणामों को इकट्ठा करने के संग्रह की उपज, अलग-अलग एफ के परिणामों में से प्रत्येक के लिए जी लागू करने से परिणामों की गणना करें।
  3. 2-स्तरीय संग्रह को समतल करें और सभी परिणामों को मिलाएं।

हमारे उदाहरणों पर वापस, आइए "बाइंडिंग" फ़ंक्शन के इस नए तरीके का उपयोग करके अपने साथ एक फ़ंक्शन को संयोजित करें (बाइंड करें):

  • 1 -> [1] -> [1] (इनपुट को दो बार लपेटें)
  • 1 -> [] -> [] (इनपुट को त्यागें, दो बार सूची में शून्यता लपेटें)
  • 1 -> [2] -> [3] (1 जोड़ें, फिर 1 फिर से जोड़ें, और परिणाम लपेटें।)
  • 3 -> [4,6] -> [5,8,7,12] (इनपुट में 1 जोड़ें, और इनपुट को भी 2 से गुणा करें, दोनों परिणामों को रखते हुए, फिर सभी परिणामों के लिए इसे फिर से करें, और फिर फाइनल लपेटें एक सूची में परिणाम।)

संयोजन कार्यों का यह अधिक परिष्कृत तरीका है साहचर्य (से कैसे समारोह रचना साहचर्य है जब आप कल्पना रैपिंग सामान नहीं कर रहे हैं के बाद)।

यह सब एक साथ बांधना,

  • एक मोनाड एक संरचना है जो गठबंधन करने के तरीके (परिणामों) को परिभाषित करता है,
  • समान रूप से कैसे एक मोनोड एक संरचना है जो वस्तुओं को संयोजित करने का एक तरीका परिभाषित करता है,
  • जहां संयोजन की विधि साहचर्य है,
  • और जहां एक विशेष 'नो-ऑप' है जिसे किसी भी चीज के साथ जोड़ा जा सकता है , जिसके परिणामस्वरूप कुछ अपरिवर्तित हो सकता है।

टिप्पणियाँ

परिणाम "लपेटने" के बहुत सारे तरीके हैं। आप एक सूची बना सकते हैं, या एक सेट कर सकते हैं, या सभी को छोड़ सकते हैं, लेकिन कोई परिणाम नहीं होने पर ध्यान देने योग्य पहला परिणाम, राज्य के एक साइडकार को संलग्न करें, एक लॉग संदेश प्रिंट करें, आदि, आदि।

मैं आवश्यक विचारों के साथ सहज रूप से आवश्यक विचार प्राप्त करने की उम्मीद में थोड़ी ढीली खेली हूं।

मैंने जोर देकर चीजों को थोड़ा सरल किया है कि हमारा मोनाद टाइप -> [ए] के कार्यों पर काम करता है । वास्तव में, मोनाड एक -> एमबी प्रकार के कार्यों पर काम करते हैं , लेकिन सामान्यीकरण एक तकनीकी विवरण की तरह है जो मुख्य अंतर्दृष्टि नहीं है।


22
यह एक अच्छा विवरण है कि कैसे प्रत्येक मोनाड एक श्रेणी का गठन करता है ( क्लेसीली श्रेणी वह है जो आप प्रदर्शन कर रहे हैं - इलेनबर्ग -मूर श्रेणी भी है)। लेकिन इस तथ्य के कारण कि आप किसी भी दो क्लेसीली तीर नहीं बना सकते हैं a -> [b]और c -> [d](आप केवल ऐसा कर सकते हैं यदि b= c), तो यह एक मोनॉइड का वर्णन नहीं करता है। यह वास्तव में सपाट कार्य है, जिसे आपने फंक्शन कंपोजीशन के बजाय वर्णित किया है, जो कि "मोनॉयड ऑपरेटर" है।
टॉम क्रॉकेट

6
दी, यदि आपने केवल एक प्रकार से एक मोनड को सीमित कर दिया है, अर्थात यदि आपने केवल क्लेइस्ली तीरों की अनुमति दी है, तो यह एक मोनॉइड a -> [a]होगा (क्योंकि आप क्लेइस्ली श्रेणी को एक ही ऑब्जेक्ट में कम कर देंगे, और केवल एक ऑब्जेक्ट की कोई भी श्रेणी। परिभाषा के अनुसार एक मोनॉइड!) है, लेकिन यह मोनाद की पूरी व्यापकता पर कब्जा नहीं करेगा।
टॉम क्रोकेट

5
अंतिम नोट पर, यह याद रखने में मदद करता है, कि a -> [a] सिर्फ a -> [] a है। ([] बस टाइप कंस्ट्रक्टर भी है।) और इसलिए इसे न केवल एक -> mb के रूप में देखा जा सकता है, बल्कि [] वास्तव में मोनाड वर्ग का एक उदाहरण है।
Evi1M4chine

8
यह भिक्षुओं की सर्वश्रेष्ठ और सबसे अधिक व्याख्या करने योग्य व्याख्या है और मैं उन शाब्दिक पृष्ठभूमि के बारे में बता रहा हूं, जो वास्तव में हफ्तों में आई हैं। यह हर हास्केल पुस्तक में मुद्रित किया जाना चाहिए, जब यह मोनाड्स, हाथों से नीचे आता है। वोट दें! हो सकता है कि आगे जानकारी का टुकड़ा मिल जाए, कि मोनडेस को पैरामीटराइज्ड टाइपकास्ट इंस्टेंस के रूप में महसूस किया जाता है, जो पोस्ट में हेकेल में डालते हैं। (कम से कम यह है कि मैंने उन्हें अब तक कैसे समझा। गलत होने पर मुझे सही करें। haskell.org/haskellwiki/What_a_Monad_is_not देखें )
sjas

1
यह शानदार है - यह एकमात्र स्पष्टीकरण है जिसे मैंने अच्छी तरह से समझा है कि इसे किसी और को समझाने में सक्षम हो ... लेकिन मुझे अभी भी समझ में नहीं आया कि यह कुछ भी सोचने का एक मूल्यवान तरीका क्यों है। :(
एडम बार्न्स

84

सबसे पहले, एक्सटेंशन और लाइब्रेरी जिनका हम उपयोग करने जा रहे हैं:

{-# LANGUAGE RankNTypes, TypeOperators #-}

import Control.Monad (join)

इनमें से, RankNTypesकेवल वही है जो नीचे तक पूरी तरह से आवश्यक है। मैंने एक बार इसकी व्याख्या लिखी थी RankNTypesकि कुछ लोगों को यह उपयोगी लगता है , इसलिए मैं इसका उल्लेख करूंगा।

टॉम क्रोकेट के उत्कृष्ट उत्तर का हवाला देते हुए , हमारे पास है:

एक भिक्षु है ...

  • एक एंडोफ़नक्टर, टी: एक्स -> एक्स
  • एक प्राकृतिक परिवर्तन, μ: T × T -> T , जहां × का अर्थ है फंक्शनल रचना
  • एक प्राकृतिक परिवर्तन, natural : I -> टी , जहां मैं एक्स पर पहचान एंडोफ्यूक्टर है

... इन कानूनों को पूरा करना:

  • μ (μ (T × T) × T) = μ (T × μ (T × T))
  • μ (((T)) = T = μ (T ()))

हम इसे हास्केल कोड में कैसे अनुवादित करते हैं? ठीक है, चलो एक प्राकृतिक परिवर्तन की धारणा से शुरू करते हैं :

-- | A natural transformations between two 'Functor' instances.  Law:
--
-- > fmap f . eta g == eta g . fmap f
--
-- Neat fact: the type system actually guarantees this law.
--
newtype f :-> g =
    Natural { eta :: forall x. f x -> g x }

एक प्रकार का प्रकार f :-> gएक फ़ंक्शन प्रकार के अनुरूप होता है, लेकिन इसे दो प्रकार (प्रकार के ) के बीच एक फ़ंक्शन के रूप में सोचने के बजाय , इसे दो फ़ंक्शनलर्स (प्रत्येक प्रकार के ) के बीच एक रूपवाद के रूप में सोचें । उदाहरण:** -> *

listToMaybe :: [] :-> Maybe
listToMaybe = Natural go
    where go [] = Nothing
          go (x:_) = Just x

maybeToList :: Maybe :-> []
maybeToList = Natural go
    where go Nothing = []
          go (Just x) = [x]

reverse' :: [] :-> []
reverse' = Natural reverse

मूल रूप से, हास्केल में, प्राकृतिक परिवर्तन कुछ प्रकार f xसे दूसरे प्रकार के कार्य होते हैं, g xजैसे कि xकॉल करने के लिए टाइप चर "अप्राप्य" होता है। इसलिए उदाहरण के लिए, sort :: Ord a => [a] -> [a]एक प्राकृतिक परिवर्तन में नहीं किया जा सकता है, क्योंकि यह "picky" है जिसके बारे में हम किस प्रकार के लिए तत्काल कर सकते हैं a। एक सहज तरीका जो मैं अक्सर यह सोचने के लिए उपयोग करता हूं वह निम्नलिखित है:

  • एक फंटरर संरचना को छूने के बिना किसी चीज की सामग्री पर काम करने का एक तरीका है ।
  • एक प्राकृतिक परिवर्तन सामग्री को छूने या देखने के बिना किसी चीज की संरचना पर काम करने का एक तरीका है

अब, उस रास्ते से, चलो परिभाषा के खंड से निपटते हैं।

पहला क्लॉज "एंडोफूनक्टर, टी: एक्स -> एक्स ।" खैर, Functorहास्केल में हर एक एंडोफूनर है जिसे लोग "हास्क श्रेणी" कहते हैं, जिसकी वस्तुएं हास्केल प्रकार (प्रकार की *) हैं और जिनके आकारिकी हास्केल फ़ंक्शन हैं। यह एक जटिल कथन की तरह लगता है, लेकिन यह वास्तव में बहुत ही तुच्छ है। इसका मतलब यह है कि यह Functor f :: * -> *आपको एक प्रकार के निर्माण का साधन देता हैf a :: * किसी भीa :: * और किसी भी कार्य करता fmap f :: f a -> f bहै f :: a -> b, और यह कि ये फनकार कानूनों का पालन करते हैं।

दूसरा खंड: द Identity हास्केल में फ़नकार (जो प्लेटफ़ॉर्म के साथ आता है, इसलिए आप इसे आयात कर सकते हैं) को इस तरह से परिभाषित किया गया है:

newtype Identity a = Identity { runIdentity :: a }

instance Functor Identity where
    fmap f (Identity a) = Identity (f a)

तो प्राकृतिक परिवर्तन I: I -> टॉम क्रॉकेट की परिभाषा से टी किसी भी Monadउदाहरण के लिए इस तरह लिखा जा सकता है t:

return' :: Monad t => Identity :-> t
return' = Natural (return . runIdentity)

तीसरा क्लॉज: हास्केल में दो फंक्शनलर्स की संरचना को इस तरह परिभाषित किया जा सकता है (जो प्लेटफॉर्म के साथ भी आता है):

newtype Compose f g a = Compose { getCompose :: f (g a) }

-- | The composition of two 'Functor's is also a 'Functor'.
instance (Functor f, Functor g) => Functor (Compose f g) where
    fmap f (Compose fga) = Compose (fmap (fmap f) fga)

तो प्राकृतिक परिवर्तन μ: T × T -> टॉम क्रॉकेट की परिभाषा से टी इस तरह लिखा जा सकता है:

join' :: Monad t => Compose t t :-> t
join' = Natural (join . getCompose)

यह कथन कि यह एंडोफूनर्स की श्रेणी में एक मोनॉयड है, तो इसका मतलब है कि Compose(आंशिक रूप से सिर्फ इसके पहले दो मापदंडों पर लागू किया गया है) सहयोगी है, और यही Identityइसका पहचान तत्व है। यानी, निम्नलिखित समरूपताएं पकड़ती हैं:

  • Compose f (Compose g h) ~= Compose (Compose f g) h
  • Compose f Identity ~= f
  • Compose Identity g ~= g

ये साबित करना बहुत आसान है क्योंकि Composeऔर Identityदोनों के रूप में परिभाषित किया गया है newtype, और हास्केल रिपोर्ट्स परिभाषित किए newtypeजा रहे प्रकार और तर्क के प्रकार के बीच एक समरूपता के रूप में शब्दार्थ को परिभाषित करते हैं newtype। तो उदाहरण के लिए, आइए सिद्ध करें Compose f Identity ~= f:

Compose f Identity a
    ~= f (Identity a)                 -- newtype Compose f g a = Compose (f (g a))
    ~= f a                            -- newtype Identity a = Identity a
Q.E.D.

में Naturalnewtype, मैं समझ नहीं क्या (Functor f, Functor g)बाधा कर रही है। क्या आप समझाएँगे?
15

@ फ़ेडरर यह वास्तव में कुछ भी आवश्यक नहीं है।
लुइस कैसिलस

1
@LuisCasillas मैंने उन Functorबाधाओं को हटा दिया है क्योंकि वे आवश्यक नहीं लगते हैं। यदि आप असहमत हैं तो उन्हें वापस जोड़ने के लिए स्वतंत्र महसूस करें।
लैम्ब्डा फेयरी

क्या आप यह समझ सकते हैं कि रचनाकारों के उत्पाद को रचना के रूप में लेने के लिए औपचारिक रूप से इसका क्या अर्थ है? विशेष रूप से, फंक्शनल रचना के लिए प्रक्षेपण आकार क्या हैं? मेरा अनुमान है कि उत्पाद को केवल एफ, एफ एक्स के खिलाफ एक फंक्टर एफ के लिए परिभाषित किया गया है और केवल तब joinपरिभाषित किया जाता है। और वह joinप्रोजेक्शन मॉर्फिज़्म है। लेकिन मुझे यकीन नहीं।
tksfz

6

नोट: नहीं, यह सच नहीं है। कुछ बिंदु पर खुद डैन पिपोनी के इस जवाब पर एक टिप्पणी थी जिसमें कहा गया था कि यहां कारण और प्रभाव बिल्कुल विपरीत था, उन्होंने जेम्स इरी के चुटकी के जवाब में अपना लेख लिखा था। लेकिन ऐसा लगता है कि हटा दिया गया है, शायद कुछ बाध्यकारी टिडियर द्वारा।

नीचे मेरा मूल जवाब है।


यह बहुत संभव है कि इरी ने मोनाडोस से मोनडेस तक पढ़ा था , एक पोस्ट जिसमें डैन पिपोनी (सिगफेप) हास्केल में मोनोड्स से मोनड्स प्राप्त करता है, जिसमें श्रेणी सिद्धांत और "हास्क पर एंडोफिएक्टर की श्रेणी" का स्पष्ट उल्लेख है । किसी भी मामले में, जो कोई आश्चर्य करता है कि एक साधु के लिए एंडोफुन्क्टरों की श्रेणी में एक भिक्षु होने का क्या मतलब है, इस व्युत्पत्ति को पढ़ने से लाभ हो सकता है।


1
"शायद कुछ बाध्यकारी टिडियर द्वारा" - या, जैसा कि हम इस साइट पर उन्हें शौक से संदर्भित करते हैं, एक मध्यस्थ :-)
halfer

6

मैक लेन की कैटिगरी थ्योरी फॉर द वर्किंग मैथेमेटिशियन के कुख्यात उद्धरण के बारे में बेहतर समझ के साथ मैं इस पोस्ट पर आया ।

जो कुछ है उसका वर्णन करने में, यह वर्णन करना अक्सर उतना ही उपयोगी होता है कि यह क्या नहीं है।

तथ्य यह है कि मैक लेन एक मोनाड का वर्णन करने के लिए वर्णन का उपयोग करता है, एक इसका मतलब यह हो सकता है कि यह कुछ अनोखा है जो मोनाड्स का वर्णन करता है। धैर्य रखने के लिए अनुरोध। बयान की व्यापक समझ विकसित करने के लिए, मेरा मानना ​​है कि यह स्पष्ट करने की आवश्यकता है कि वह कुछ ऐसा वर्णन नहीं कर रहा है जो मोनाड्स के लिए अद्वितीय है; यह कथन समान रूप से दूसरों के बीच एपेरेटिव और एरो का वर्णन करता है। इसी कारण से हमारे पास Int (Sum and Product) पर दो मोनॉयड हो सकते हैं, हमारे पास X पर एंडोफ्यूनर्स की श्रेणी में कई मोनॉयड हो सकते हैं। लेकिन समानता के लिए और भी अधिक है।

मोनाद और आवेदन दोनों मापदंड को पूरा करते हैं:

  • एंडो => कोई भी तीर या आकृतिवाद, जो एक ही स्थान पर शुरू और समाप्त होता है
  • functor => कोई भी तीर, या दो श्रेणियों के बीच आकारिकी

    (जैसे, दिन में दिन Tree a -> List b, लेकिन श्रेणी में Tree -> List)

  • monoid => एकल वस्तु; यानी, एक एकल प्रकार, लेकिन इस संदर्भ में, केवल बाहरी परत के संबंध में; तो, हम नहीं कर सकते Tree -> List, केवल List -> List

बयान "श्रेणी की ..." का उपयोग करता है यह कथन के दायरे को परिभाषित करता है। एक उदाहरण के रूप में, फ़नकार श्रेणी f * -> g *, अर्थात Any functor -> Any functor, जैसे, Tree * -> List *या के दायरे का वर्णन करती है Tree * -> Tree *

एक श्रेणीबद्ध कथन में यह निर्दिष्ट नहीं किया गया है कि कुछ भी और सब कुछ की अनुमति कहां है

इस मामले में, फंक्शंस के अंदर, * -> *उर्फ a -> bनिर्दिष्ट नहीं है जिसका अर्थ है Anything -> Anything including Anything else। जैसा कि मेरी कल्पना इंट -> स्ट्रिंग में कूदती है, इसमें भी शामिल है Integer -> Maybe Int, या Maybe Double -> Either String Intजहां भी a :: Maybe Double; b :: Either String Int

तो कथन इस प्रकार है:

  • फन्नेटर स्कोप :: f a -> g b(अर्थात, किसी भी पैरामीटर प्रकार को किसी भी पैरामीटर प्रकार के लिए)
  • एंडो + फन्क्टर :: f a -> f b(यानी, किसी भी एक प्रकार का एक ही पैरामीटर प्रकार के लिए मानकीकृत) ... अलग तरीके से कहा,
  • एंडोफूनर की श्रेणी में एक मोनॉयड

तो, इस निर्माण की शक्ति कहां है? पूर्ण गतिकी की सराहना करने के लिए, मुझे यह देखने की आवश्यकता है कि एक मोनॉइड के विशिष्ट चित्र (एक पहचान तीर की तरह दिखने वाली एकल वस्तु :: single object -> single object), यह स्पष्ट करने में विफल रहता है कि मुझे किसी भी संख्या में मोनोइड मान के साथ पैरामीटर किए गए तीर का उपयोग करने की अनुमति है , वहाँ से एक प्रकार वस्तु monoid में अनुमति दी। एंडो, ~ आइडेंटिटी एरो डेफिनेशन की परिभाषा फनकार के प्रकार के मूल्य और सबसे आंतरिक, "पेलोड" परत के प्रकार और मूल्य दोनों को अनदेखा करती है । इस प्रकार, तुल्यता किसी भी स्थिति में लौटती है, जहाँ पर फनकार के प्रकार मेल खाते हैं (उदाहरण के लिए, क्योंकि वे दोनों समान हैं )।trueNothing -> Just * -> NothingJust * -> Just * -> Just *Maybe -> Maybe -> Maybe

साइडबार: ~ बाहर वैचारिक है, लेकिन बाईं ओर सबसे अधिक प्रतीक है f a। यह भी वर्णन करता है कि "हास्केल" क्या पढ़ता है-पहली (बड़ी तस्वीर); इसलिए टाइप एक प्रकार के मूल्य के संबंध में "बाहर" है। प्रोग्रामिंग में परतों (संदर्भों की एक श्रृंखला) के बीच संबंध श्रेणी में संबंधित होना आसान नहीं है। सेट की श्रेणी का उपयोग प्रकारों (इंट, स्ट्रिंग्स, शायद इंट आदि) का वर्णन करने के लिए किया जाता है, जिसमें फ़िनेक्टर की श्रेणी (पैरामीटर प्रकार) शामिल हैं। संदर्भ श्रृंखला: फ़न्क्टर प्रकार, फ़ंक्टर मान (फ़न के सेट के तत्व, जैसे, कुछ नहीं, बस), और बदले में, प्रत्येक फ़नकार मान को इंगित करता है। श्रेणी में संबंध को अलग तरह से वर्णित किया जाता है, उदाहरण के लिए, return :: a -> m aएक फ़ंक्टर से दूसरे फ़ंक्टर में एक प्राकृतिक परिवर्तन माना जाता है, इस प्रकार अब तक उल्लिखित किसी भी चीज़ से अलग।

मुख्य धागे पर वापस, सभी में, किसी भी परिभाषित टेंसर उत्पाद और एक तटस्थ मूल्य के लिए, बयान अपनी विडंबनापूर्ण संरचना से पैदा एक आश्चर्यजनक शक्तिशाली कम्प्यूटेशनल निर्माण का वर्णन करते हुए समाप्त होता है:

  • बाहर पर यह एक ही वस्तु (जैसे, :: List) के रूप में प्रकट होता है ; स्थिर
  • लेकिन अंदर, बहुत सारी गतिशीलता की अनुमति देता है
    • किसी भी प्रकार के मानों की संख्या (उदाहरण के लिए, खाली | ~ NonEmpty) चारे के रूप में। टेनर उत्पाद किसी भी मूल्य के इनपुट की संख्या को कम करेगा ... बाहरी परत के लिए (~ foldजो पेलोड के बारे में कुछ नहीं कहता है)
    • आंतरिक सबसे अधिक परत के लिए दोनों प्रकार और मूल्यों की अनंत सीमा

हास्केल में, कथन की प्रयोज्यता को स्पष्ट करना महत्वपूर्ण है। इस निर्माण की शक्ति और चंचलता, एक साधु के पास करने के लिए बिल्कुल नहीं है प्रति है । दूसरे शब्दों में, निर्माण इस बात पर निर्भर नहीं करता है कि क्या एक मोनाड को अद्वितीय बनाता है।

जब यह पता लगाने की कोशिश की जाती है कि एक दूसरे पर निर्भर कम्प्यूटेशंस का समर्थन करने के लिए साझा संदर्भ के साथ कोड का निर्माण करना है, या उन गणनाओं को जो समानांतर में चलाए जा सकते हैं, तो यह कुख्यात बयान, जितना कि यह वर्णन करता है, विकल्प की पसंद के बीच विपरीत नहीं है एपेरेटिव, एरो और मोनाड्स, बल्कि एक विवरण है कि वे कितने समान हैं। हाथ में लिए निर्णय के लिए, बयान मौन है।

यह अक्सर गलत समझा जाता है। कथन का वर्णन किया जाता हैjoin :: m (m a) -> m a मोनोएडल एंडोफिनक्टर के टेंसर उत्पाद के रूप में करता है। हालाँकि, यह स्पष्ट नहीं करता है कि, इस कथन के संदर्भ में (<*>)भी कैसे चुना जा सकता है। यह वास्तव में छह / आधा दर्जन का एक उदाहरण है। मूल्यों के संयोजन के लिए तर्क बिल्कुल समान हैं; एक ही इनपुट प्रत्येक से एक ही आउटपुट उत्पन्न करता है (Int के लिए Sum और उत्पाद के विपरीत) क्योंकि वे Ints का संयोजन करते समय अलग-अलग परिणाम उत्पन्न करते हैं।

तो, पुनरावृत्ति करने के लिए: एंडोफुन्क्टरों की श्रेणी में एक मोनोइड का वर्णन है:

   ~t :: m * -> m * -> m *
   and a neutral value for m *

(<*>)और (>>=)दोनों mएकल वापसी मूल्य की गणना करने के लिए दो मूल्यों को एक साथ उपयोग प्रदान करते हैं । रिटर्न मान की गणना करने के लिए उपयोग किए जाने वाले तर्क बिल्कुल समान हैं। यदि यह काम करता है वे (parameterize के विभिन्न आकार के लिए नहीं थे f :: a -> bबनाम k :: a -> m b(अर्थात) और गणना के एक ही वापसी प्रकार के साथ पैरामीटर की स्थिति a -> b -> bबनाम b -> a -> bके लिए प्रत्येक क्रमशः), मुझे लगता है हम monoidal तर्क, parameterized किया जा सकता था दोनों परिभाषाओं में पुन: उपयोग के लिए टेंसर उत्पाद। बिंदु बनाने के लिए एक अभ्यास के रूप में, प्रयास करें और कार्यान्वित करें ~t, और आप इसे परिभाषित करने के तरीके के आधार पर समाप्त होते हैं (<*>)और (>>=)निर्भर करते हैं forall a b

यदि मेरा अंतिम बिंदु न्यूनतम वैचारिक रूप से सत्य है, तो यह लागू करने योग्य और मोनाड के बीच सटीक और केवल कम्प्यूटेशनल अंतर को स्पष्ट करता है: वे कार्य जो वे पैरामीटर करते हैं। दूसरे शब्दों में, अंतर इन प्रकार की कक्षाओं के कार्यान्वयन के लिए बाहरी है।

अंत में, मेरे स्वयं के अनुभव में, मैक लेन के बदनाम उद्धरण ने एक महान "गोटो" मेमे प्रदान किया, जो मेरे लिए एक गाइडपोस्ट था, जिसने हास्केल में इस्तेमाल किए गए मुहावरों को बेहतर ढंग से समझने के लिए श्रेणी के माध्यम से मेरे रास्ते को नेविगेट किया। यह हास्केल में आश्चर्यजनक रूप से सुलभ एक शक्तिशाली कंप्यूटिंग क्षमता के दायरे पर कब्जा करने में सफल होता है।

हालाँकि, इस बात में विडंबना है कि मैंने पहले कैसे बयान को साधुवाद से बाहर बताया, और मुझे आशा है कि मैं यहां बताऊंगा। वह सब कुछ जो यह बताता है कि लागू और मोनाड (और दूसरों के बीच तीर) के बीच समान है। जो यह नहीं कहता है वह उनके बीच का छोटा लेकिन उपयोगी अंतर है।

- इ


5

जवाब यहाँ दोनों monoids और monads को परिभाषित करने में एक उत्कृष्ट काम करते हैं, हालांकि, वे अभी भी इस सवाल का जवाब नहीं देते हैं:

और एक कम महत्वपूर्ण नोट पर, क्या यह सच है और यदि आप एक स्पष्टीकरण दे सकते हैं (उम्मीद है कि कोई ऐसा व्यक्ति जो किसी को बहुत हास्केल अनुभव नहीं हो सकता है) समझ सकता है?

इस मामले का क्रैक्स जो यहां गायब है, "मोनोइड" की अलग-अलग धारणा है, तथाकथित वर्गीकरण को अधिक सटीक रूप से - एक मोनोइडल श्रेणी में मोनोइड का एक। अफसोस की बात यह है कि मैक लेन की किताब खुद को बहुत ही भ्रमित करती है :

सभी ने बताया, में एक Xसनद एंडोफुन्क्टरों की श्रेणी में एक मोनॉयड है X, जिसमें उत्पाद की ×जगह एंडोफुन्क्टरों की रचना और पहचान एन्डोफ़नक्टर द्वारा स्थापित इकाई है।

मुख्य भ्रम

यह भ्रामक क्यों है? क्योंकि यह परिभाषित नहीं करता है कि "एंडोफुन्क्टरों की श्रेणी में" क्या है X। इसके बजाय, यह वाक्य बाइनरी ऑपरेशन के रूप में फंक्टर रचना और एक मोनोएडल इकाई के रूप में पहचान फ़नकारक के साथ सभी एंडोफ़नक्टरों के सेट के अंदर एक मोनॉइड लेने का सुझाव देता है । जो पूरी तरह से ठीक काम करता है और एक मोनोएड में बदल जाता है, जिसमें एंडोफुनेक्टर्स का कोई सबसेट होता है, जिसमें पहचान फ़नकार होता है और फ़नकार रचना के तहत बंद होता है।

फिर भी यह सही व्याख्या नहीं है, जो पुस्तक उस स्तर पर स्पष्ट करने में विफल रहती है। एक मोनाड fएक स्थिर एंडोफ़नक्टर है, न कि रचना के तहत बंद किए गए एंडोफ़नक्टर्स का सबसेट। एक सामान्य निर्माण स्वयं के साथ-साथ सभी रचनाओं के सेट को ले कर एक मोनॉइड उत्पन्नf करने के लिए उपयोग करना है, जिसमें पहचान से मेल खाती है । और अब सभी के लिए इन सभी शक्तियों का सेट वास्तव में एक मोनॉइड है "उत्पाद × के साथ एंडोफुन्क्टरों की संरचना और पहचान एंडोफ़नक्टर द्वारा स्थापित इकाई"।kf^k = f(f(...))fk=0f^0 = idSk>=0

और फिर भी:

  • इस मोनॉइड Sको किसी भी फ़नकार fया यहां तक ​​कि शाब्दिक रूप से किसी भी आत्म-मानचित्र के लिए परिभाषित किया जा सकता है X। यह द्वारा उत्पन्न मोनॉइड है f
  • फ़नकार Sरचना और पहचान फ़नकार द्वारा दी गई मोनोडल संरचना का fएक सन्यासी होने या न होने से कोई संबंध नहीं है।

और चीजों को और अधिक भ्रमित करने के लिए, "मोनॉइड इन मोनॉयडल श्रेणी" की परिभाषा पुस्तक में बाद में आती है जैसा कि आप सामग्री की तालिका से देख सकते हैं । और फिर भी इस धारणा को समझना मोनाड्स के साथ संबंध को समझने के लिए बिल्कुल महत्वपूर्ण है।

(स्ट्रिक्ट) मोनोएडल श्रेणियां

मोनॉयड्स पर अध्याय VII (जो कि मॉनैड्स के अध्याय VI से बाद में आता है) पर जाने पर, हम तथाकथित सख्त मोनोएडल श्रेणी की परिभाषा को ट्रिपल के रूप में पाते हैं (B, *, e), जहां Bएक श्रेणी है, *: B x B-> Bएक द्विभाजक (एक घटक के लिए प्रत्येक घटक के संबंध में फ़ंक्शंस ) ) और eएक इकाई वस्तु है B, जिसमें समरूपता और इकाई कानूनों को संतुष्ट करना है:

(a * b) * c = a * (b * c)
a * e = e * a = a

किसी भी वस्तुओं के लिए a,b,cकी B, और किसी भी morphisms के लिए एक ही पहचान a,b,cके साथ eद्वारा बदल दिया id_e, की पहचान आकारिता e। अब यह देखने का निर्देश दिया गया है कि हमारे हित के मामले में, जहाँ प्राकृतिक परिवर्तनों Bके Xसाथ-साथ मोर्फिज़्म, फ़ंफ़र *रचना और eपहचान फ़नकार, इन सभी कानूनों को संतुष्ट किया जाता है , जहाँ सीधे सत्यापित किया जा सकता है।

पुस्तक के बाद जो आता है, वह "आराम" वाली मोनॉइडल श्रेणी की परिभाषा है , जहां कानून केवल मोडुलो को पकड़ते हैं, जो कुछ निश्चित प्राकृतिक परिवर्तनों को तथाकथित सुसंगत संबंधों को संतुष्ट करते हैं , जो कि एंडोफूनर श्रेणियों के हमारे मामलों के लिए महत्वपूर्ण नहीं है।

मोनोइडल श्रेणियों में मोनॉयड

अंत में, अध्याय VII के खंड 3 "Monoids" में, वास्तविक परिभाषा दी गई है:

एक cमोनॉइडल श्रेणी में एक मोनॉयड दो तीरों (आकारिकी) (B, *, e)के Bसाथ एक वस्तु है

mu: c * c -> c
nu: e -> c

3 आरेख बनाना स्मरण करो कि हमारे मामले में, ये एंडोफुन्क्टरों की श्रेणी में आकारिकी हैं, जो प्राकृतिक रूप से ठीक joinऔर returnएक मोनाड के लिए परिवर्तन हैं । कनेक्शन और भी स्पष्ट हो जाता है जब हम रचना को *अधिक स्पष्ट बनाते हैं , इसके स्थान c * cपर c^2, cहमारा मोनाड कहां है।

अंत में, ध्यान दें कि 3 कम्यूटेटिव आरेख (मोनॉयडल श्रेणी में एक मोनोइड की परिभाषा में) सामान्य (गैर-सख्त) मोनोएडल श्रेणियों के लिए लिखे गए हैं, जबकि हमारे मामले में मोनोइडल श्रेणी के हिस्से के रूप में उत्पन्न होने वाले सभी प्राकृतिक परिवर्तन वास्तव में पहचान हैं। यह आरेखों को बिल्कुल वैसा ही बना देगा जैसा कि एक संन्यासी की परिभाषा में है, जिससे पत्राचार पूरा हो जाता है।

निष्कर्ष

संक्षेप में, कोई भी मोनाड एक एन्डोफ़ुन्क्टर की परिभाषा के अनुसार होता है, इसलिए एन्डोफ़ुन्क्टरों की श्रेणी में एक वस्तु, जहाँ विमुद्रीकरण joinऔर returnसंचालक उस विशेष (सख्त) मोनोएडल श्रेणी में एक मोनॉइड की परिभाषा को संतुष्ट करते हैं । इसके विपरीत, एंडोफुंक्टर्स के मोनॉइडल श्रेणी में कोई भी मोनॉयड (c, mu, nu)एक वस्तु और दो तीरों से मिलकर एक ट्रिपल परिभाषा है , उदाहरण के लिए हमारे मामले में प्राकृतिक परिवर्तन, एक ही कानून को एक सन्यासी के रूप में संतुष्ट करते हैं।

अंत में, (शास्त्रीय) monoids और अधिक सामान्य monoidal श्रेणियों में सामान्य अंतर के बीच महत्वपूर्ण अंतर पर ध्यान दें। दो तीर muऔर nuऊपर एक बाइनरी ऑपरेशन और एक सेट में एक इकाई नहीं हैं। इसके बजाय, आपके पास एक निश्चित एंडोफ़नक्टर है c। फ़नकार रचना *और अकेले पहचान फ़नकार, पुस्तक में उस भ्रामक टिप्पणी के बावजूद, सनक के लिए आवश्यक पूरी संरचना प्रदान नहीं करते हैं।

एक और दृष्टिकोण मानक monoid साथ तुलना करने के लिए किया जाएगा Cएक सेट के सभी स्वयं नक्शे का Aहै, जहां द्विआधारी आपरेशन रचना है, जो मानक कार्तीय उत्पाद मैप करने के लिए देखा जा सकता है C x Cमें C। वर्गीकृत मोनॉइड को पास करते हुए, हम कार्टेसियन उत्पाद xको फ़ंक्टर रचना के साथ बदल रहे हैं *, और बाइनरी ऑपरेशन को प्राकृतिक परिवर्तन muसे बदल दिया जाता c * cहै c, जो joinऑपरेटरों का एक संग्रह है

join: c(c(T))->c(T)

प्रत्येक वस्तु के लिए T(प्रोग्रामिंग में प्रकार)। और शास्त्रीय मोनॉइड में पहचान तत्व, जिन्हें निश्चित एक-बिंदु-सेट से नक्शे की छवियों के साथ पहचाना जा सकता है, returnऑपरेटरों के संग्रह के साथ प्रतिस्थापित हो जाते हैं

return: T->c(T) 

लेकिन अब अधिक कार्टेशियन उत्पाद नहीं हैं, इसलिए तत्वों की कोई जोड़ी नहीं है और इस प्रकार कोई बाइनरी ऑपरेशन नहीं है।


तो सवाल का "यह सच है" भाग में आपका जवाब क्या है? क्या यह सच है कि एक भिक्षु एंडोफुन्क्टरों की श्रेणी में एक मठ है? और यदि हाँ, तो एक मोनॉयड और एक बीजगणितीय मोनॉइड (एक साहचर्य गुणन और एक इकाई के साथ एक सेट) की श्रेणी सिद्धांत धारणा के बीच क्या संबंध है?
अलेक्जेंडर बेलोपोलस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.