2014-07-22 5 views
13

recursion-schemes पैकेज में हम तथ्य यह है कि एक (सख्ती से पॉजिटिव) बीजीय डेटा प्रकारबीजगणितीय प्रकार केवल प्रारंभिक बीजगणित (या वीज़ा बनाम) क्यों होगा?

  1. एक हस्ताक्षर functor है व्यक्त कर सकते हैं, f
  2. प्रारंभिक f -algebra है, और
  3. अंतिम है f -coalgebra

उदाहरण के लिए, हम ऐसा [a] के लिए निम्न कोड

012 के साथ कर सकते
-- (1) define and declare the signature functor, here called Base 

data instance Prim [a] x = Nil | Cons a x deriving Functor 
type instance Base [a] = Prim [a] 

-- (2) demonstrate the initial algebra 
instance Foldable [a] where 
    project []  = Nil 
    project (a:as) = Cons a as 

-- (3) demonstrate the final coalgebra 
instance Unfoldable [a] where 
    embed Nil   = [] 
    embed (Cons a as) = a:as 

विशेष रूप से, किसी भी प्रकार के लिए जहां हमारे पास (1), (2), और (3) हमें (project, embed) गवाहों को एक आइसोमोर्फिज्म होना चाहिए।

यह मेरी समझ है कि डेटा प्रकार बड़े (या कम से कम सख्ती से पॉजिटिव) हमेशा कुछ हस्ताक्षरकर्ता के अंतिम/प्रारंभिक सह/बीजगणित होते हैं-वास्तव में, वे हमेशा दोनों होते हैं।

तो मेरा सवाल है: Foldable और अलग वर्गों के रूप में क्यों है? डेटा प्रकार कब एक या दूसरे होगा?

वर्तमान में मैं कल्पना कर सकता हूं कि यह सार डेटा प्रकारों के लिए मूल्यवान हो सकता है जो केवल तह या अस्थायी इंटरफेस प्रदान करना चाहते हैं, लेकिन क्या अन्य बार भी हैं?

+0

क्या हमें किसी भी प्रकार के लिए पारस्परिक बीजगणित और कोयलाग्रा को परिभाषित करना आवश्यक है? क्या यह संभव हो सकता है कि किसी प्रकार के लिए, कोई मूल्य बनाने के लिए बीजगणित को परिभाषित करना चाहता है, और कोयलेब्रा को संसाधित करने के लिए (और केवल उन्हें 'दोहराया' नहीं)? – didierc

+2

आप निश्चित रूप से कर सकते हैं, इसका मतलब यह होगा कि आपके प्रकट होने वाले संभावित मूल्यों के उप-समूह में प्रकट होते हैं और फ़ोल्डर्स संभव डेटा के उप-समूह को "दृश्य" देखते हैं-यह लगभग निश्चित रूप से एक सार डेटा प्रकार में होता है (अन्यथा यह बिल्कुल सार क्यों है?) । 'फोल्डबल'/'अनफोल्डबल' के इच्छित अर्थों पर मेरा पढ़ना यह है कि 'बेस' फंक्चर वास्तव में इस प्रकार के हस्ताक्षर फ़ैक्टर होना चाहिए और इस प्रकार वे पारस्परिक हैं। –

+1

ऐसा लगता है कि 'फोल्डबल' और 'अनफोल्डबल' क्रमशः प्रारंभिक या अंतिम नहीं, क्रमशः बीजगणित और कोलेजब्रस के रूप में डेटाटाइप प्रदर्शित करने के लिए हैं। (शायद यह है कि @didierc भी कह रहा था।) –

उत्तर

5

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

उदाहरण के लिए, एक अनंत सूची का गुना आंशिक है।

+0

मैं उस तनाव को अपने दिमाग में नहीं रखता, लेकिन आप सही हैं। मुझे यकीन नहीं है कि इसे कैसे वाक्यांशित किया जाए, हालांकि (और मैं किसी भी सुझाव के साथ खुशी से प्रश्न संपादित करूंगा)। मैं इस विचार का सुझाव देना चाहता हूं कि कम से कम निश्चित बिंदु और सबसे बड़ा निश्चित बिंदु हास्केल में मेल खाता है, या कम से कम यह आपको जेनरेटर को गुना करने से प्रतिबंधित नहीं करता है। यह सार्वभौमिकता को तोड़ता है, लेकिन मुझे नहीं पता कि यह और कैसे कहें। –

संबंधित मुद्दे