मुझे वास्तव में यह सवाल पसंद है। मुझे पूरी जानकारी नहीं है, लेकिन मेरे पास कुछ चीजें हैं (सहायता के द्वारा) विकिपीडिया लेख है , जिसमें कुछ साफ-सुथरी मेजें हैं और खुद भी):
मुझे लगता है कि योग प्रकार / संघ प्रकार ( जैसे data Either a b = Left a | Right b
) के बराबर हैं समावेशी अस्वीकृति के । और, हालांकि मैं करी-हावर्ड से बहुत अच्छी तरह से परिचित नहीं हूं, लेकिन मुझे लगता है कि यह इसे प्रदर्शित करता है। निम्नलिखित कार्य पर विचार करें:
andImpliesOr :: (a,b) -> Either a b
andImpliesOr (a,_) = Left a
अगर मैं चीजों को सही ढंग से समझ, प्रकार का कहना है कि ( एक ∧ ख ) → ( एक ★ ख ,) और परिभाषा का कहना है कि यह सच है जहां ★ या तो समावेशी या अनन्य जो भी है या, Either
का प्रतिनिधित्व करता है। आपने Either
अनन्य या, You का प्रतिनिधित्व किया है; हालांकि, ( एक ∧ ख ) ↛ ( एक ⊕ ख )। उदाहरण के लिए, ⊤ ⊤ ⊤ ⊤ ⊤, लेकिन ⊤ ⊤ ⊤ ⊤ ⊤, और ⊤ ⊤ ⊤। दूसरे शब्दों में, यदि a और b दोनों सत्य हैं, तो परिकल्पना सत्य है लेकिन निष्कर्ष गलत है, और इसलिए यह निहितार्थ गलत है। हालांकि, स्पष्ट रूप से, ( एक ∧ ख ) → ( एक ∨ b ), चूँकि a और b दोनों सत्य हैं, तो कम से कम एक सत्य है। इस प्रकार, यदि भेदभाव वाली यूनियनें किसी प्रकार की अव्यवस्था हैं, तो वे समावेशी किस्म की होनी चाहिए। मुझे लगता है कि यह एक प्रमाण के रूप में है, लेकिन मुझे इस धारणा से मुक्त करने के लिए स्वतंत्र महसूस करने से अधिक लगता है।
इसी तरह, पहचान समारोह और गैर-समाप्ति वाले कार्यों के रूप में तना विज्ञान और गैरबराबरी के लिए आपकी परिभाषाएं थोड़ी दूर हैं। सच्चा सूत्र इकाई प्रकार द्वारा दर्शाया गया है , जो कि प्रकार है जिसमें केवल एक तत्व है ( data ⊤ = ⊤
, अक्सर वर्तनी ()
और / या Unit
कार्यात्मक प्रोग्रामिंग भाषाओं में)। यह समझ में आता है: चूंकि उस प्रकार का निवास करने की गारंटी है, और चूंकि केवल एक ही संभव निवासी है, यह सच होना चाहिए। पहचान समारोह केवल उस विशेष टैटोलॉजी का प्रतिनिधित्व करता है जो एक → ए ।
नॉन-टर्मिनेटिंग फंक्शन्स के बारे में आपकी टिप्पणी, इस बात पर निर्भर करती है कि आपका मतलब क्या है, अधिक बंद। करी-हावर्ड प्रकार प्रणाली पर कार्य करता है, लेकिन गैर-समाप्ति वहां एन्कोड नहीं की जाती है। के अनुसार विकिपीडिया , गैर समाप्ति के साथ काम कर, एक मुद्दा है जोड़ने के रूप में यह असंगत लॉजिक्स (पैदा करता है जैसे , मैं परिभाषित कर सकते हैं wrong :: a -> b
द्वारा wrong x = wrong x
, और इस तरह "साबित" कि एक → ख किसी के लिए एक और ख )। यदि आप "बेतुकेपन" से यही मतलब रखते हैं, तो आप बिल्कुल सही हैं। यदि इसके बजाय आप गलत बयान का मतलब है, तो आप क्या चाहते हैं इसके बजाय किसी भी निर्जन प्रकार, जैसे कुछ परिभाषित किया गया हैdata ⊥
यह क्या है, इसका निर्माण करने का कोई तरीका नहीं है। यह सुनिश्चित करता है कि इसका कोई मूल्य नहीं है, और इसलिए इसे निर्जन होना चाहिए, जो झूठ के बराबर है। मुझे लगता है कि आप शायद इसका उपयोग भी कर सकते हैं a -> b
, क्योंकि अगर हम गैर-समाप्ति वाले कार्यों को मना करते हैं, तो यह भी निर्जन है, लेकिन मुझे 100% यकीन नहीं है।
विकिपीडिया कहता है कि आप दो अलग-अलग तरीकों से स्वयंसिद्ध हैं, यह इस बात पर निर्भर करता है कि आप करी-हावर्ड की व्याख्या कैसे करते हैं: या तो कॉम्बिनेटरों में या चर में। मुझे लगता है कि कॉम्बिनेटर दृश्य का अर्थ है कि हमें दिए गए आदिम कार्यों को डिफ़ॉल्ट रूप से कह सकने वाली चीजों को सांकेतिक शब्दों में बदलना है (जिस तरह से मोडस पोनेंस एक स्वयंसिद्ध है क्योंकि फ़ंक्शन अनुप्रयोग आदिम है)। और मुझे लगता है कि परिवर्तनीय दृश्य का वास्तव में एक ही मतलब हो सकता है- कॉम्बिनेटर, आखिरकार, केवल वैश्विक चर हैं जो विशेष कार्य हैं। आदिम प्रकारों के लिए: यदि मैं इस बारे में सही ढंग से सोच रहा हूं, तो मुझे लगता है कि आदिम प्रकार की संस्थाएं हैं- आदिम वस्तुएं जिनके बारे में हम चीजों को साबित करने की कोशिश कर रहे हैं।
मेरे तर्क और अर्थ विज्ञान वर्ग, वास्तव के अनुसार कि ( एक ∧ ख ) → सी ≡ एक → ( ख → ग ) (और यह भी कि ख → ( एक → ग )) निर्यात तुल्यता कानून कहा जाता है, प्राकृतिक कटौती में कम से कम सबूत। मैंने उस समय नोटिस नहीं किया था कि यह सिर्फ करी गई थी - काश, मेरे पास होता, क्योंकि यह अच्छा है!
हालांकि अब हमारे पास समावेशी अस्वीकृति का प्रतिनिधित्व करने का एक तरीका है , हमारे पास अनन्य विविधता का प्रतिनिधित्व करने का एक तरीका नहीं है। : हम अनन्य अलगाव की परिभाषा का उपयोग करने के लिए यह प्रतिनिधित्व करने के लिए सक्षम होना चाहिए एक ⊕ ख ≡ ( एक ∨ ख ) ∧ ¬ ( एक ∧ ख )। मैं कैसे लिख निषेध करने के लिए पता नहीं है, लेकिन मैं पता चलेगा कि ¬ पी ≡ पी → ⊥, और दोनों निहितार्थ और झूठ आसान है। इस प्रकार हमें विशेष छूट का प्रतिनिधित्व करने में सक्षम होना चाहिए:
data ⊥
data Xor a b = Xor (Either a b) ((a,b) -> ⊥)
यह ⊥
बिना मूल्यों वाले खाली प्रकार को परिभाषित करता है, जो मिथ्यात्व से मेल खाता है; Xor
तो शामिल करने के लिए परिभाषित किया गया है दोनों ( और ) Either
एक एक या एक ख ( या ) और एक समारोह ( निहितार्थ से) (क, ख) ( और ) नीचे प्रकार (करने के लिए झूठी )। हालांकि, मुझे इसका कोई मतलब नहीं है कि इसका क्या मतलब है । ( 1 संपादित करें: अब मैं करता हूँ, अगला पैराग्राफ देखें!) चूंकि कोई प्रकार के मूल्य नहीं हैं (a,b) -> ⊥
(वहाँ हैं?), मैं थाह नहीं लगा सकता कि इसका किसी कार्यक्रम में क्या अर्थ होगा। क्या किसी को इस परिभाषा या किसी अन्य के बारे में सोचने का एक बेहतर तरीका पता है? ( संपादन 1: हां, कैमकैन ।)
संपादित करें 1: कैमकैन के जवाब के लिए धन्यवाद (अधिक विशेष रूप से, वह टिप्पणी जो उस पर मेरी मदद करने के लिए छोड़ दी), मुझे लगता है कि मैं देख रहा हूं कि यहां क्या हो रहा है। मूल्य के प्रकार का निर्माण करने के लिए Xor a b
, आपको दो चीजें प्रदान करने की आवश्यकता है। सबसे पहले, a
या तो b
पहले तर्क के तत्व के अस्तित्व का साक्षी ; वह है, एक Left a
या एक Right b
। और दूसरा, एक प्रमाण कि दोनों प्रकार के तत्व नहीं हैं — a
और b
दूसरे शब्दों में, एक प्रमाण जो (a,b)
निर्जन है — दूसरे तर्क के रूप में। जब से तुम ही से एक समारोह में लिखने के लिए सक्षम हो जाएगा (a,b) -> ⊥
, तो (a,b)
निर्जन है, इसका क्या मतलब है कि मामला होने के लिए? इसका मतलब यह होगा कि कुछ प्रकार की वस्तु(a,b)
निर्माण नहीं किया जा सका; दूसरे शब्दों में, कि कम से कम एक, और संभवतः दोनों, a
और b
साथ ही निर्जन हैं! इस मामले में, यदि हम पैटर्न मिलान के बारे में सोच रहे हैं, तो आप संभवतः इस तरह के ट्यूपल पर पैटर्न-मैच नहीं कर सकते: यह मानते हुए कि b
निर्जन है, हम क्या लिखेंगे जो उस ट्यूपल के दूसरे भाग से मेल खा सके? इस प्रकार, हम इसके खिलाफ मैच पैटर्न नहीं कर सकते हैं, जो आपको यह देखने में मदद कर सकता है कि यह इसे निर्जन क्यों बनाता है। अब, कुल कार्य करने का एकमात्र तरीका जो कोई तर्क नहीं लेता है (जैसा कि यह एक होना चाहिए, क्योंकि (a,b)
निर्जन है) परिणाम के लिए एक निर्जन प्रकार का है - अगर हम इस बारे में एक पैटर्न-मिलान परिप्रेक्ष्य से सोच रहे हैं, इसका मतलब यह है कि भले ही फ़ंक्शन के कोई मामले नहीं हैं, फिर भी कोई संभव शरीर नहीं है यह भी हो सकता है, और इसलिए सब कुछ ठीक है।
इसमें से बहुत कुछ मुझे उड़ने पर जोर से / साबित (उम्मीद) बातें सोच रहा है, लेकिन मुझे आशा है कि यह उपयोगी है। मैं वास्तव में विकिपीडिया लेख की सिफारिश करता हूं ; मैंने इसके बारे में किसी भी प्रकार से विस्तार से नहीं पढ़ा है, लेकिन इसकी सारणियाँ बहुत अच्छा सारांश हैं, और यह बहुत गहन है।