बीजगणितीय डेटा प्रकारों के बीजगणित का दुरुपयोग करना - यह काम क्यों करता है?


289

बीजीय डेटा प्रकारों के लिए 'बीजीय' अभिव्यक्ति गणित में पृष्ठभूमि वाले किसी व्यक्ति के लिए बहुत विचारोत्तेजक है। मुझे समझाने का प्रयास करें कि मेरा क्या मतलब है।

बुनियादी प्रकारों को परिभाषित करने के बाद

  • उत्पाद
  • संघ +
  • एकाकी वस्तु X
  • इकाई 1

और आशुलिपि का उपयोग कर के लिए X•Xऔर 2Xके लिए X+Xवगैरह, हम तो बीजीय भाव जुड़ा हुआ सूचियों जैसे के लिए परिभाषित कर सकते हैं

data List a = Nil | Cons a (List a)L = 1 + X • L

और बाइनरी पेड़:

data Tree a = Nil | Branch a (Tree a) (Tree a)T = 1 + X • T²

अब, गणितज्ञ के रूप में मेरी पहली वृत्ति इन भावों के साथ पागल होने की है, और हल करने के लिए प्रयास करें Lऔर T। मैं इसे बार-बार प्रतिस्थापन के माध्यम से कर सकता था, लेकिन यह बहुत ही आसान लगता है कि संकेतन का दुरुपयोग करने के लिए यह आसान है और दिखावा करता है कि मैं इसे इच्छानुसार पुनर्व्यवस्थित कर सकता हूं। उदाहरण के लिए, लिंक की गई सूची के लिए:

L = 1 + X • L

(1 - X) • L = 1

L = 1 / (1 - X) = 1 + X + X² + X³ + ...

जहाँ मैंने 1 / (1 - X)एक दिलचस्प परिणाम प्राप्त करने के लिए पूरी तरह से अनुचित तरीके से पावर सीरीज़ के विस्तार का उपयोग किया है , जिसका अर्थ है कि एक Lप्रकार या तो है Nil, या इसमें 1 तत्व है, या इसमें 2 तत्व हैं, या 3, आदि।

यह अधिक दिलचस्प हो जाता है अगर हम इसे बाइनरी पेड़ों के लिए करते हैं:

T = 1 + X • T²

X • T² - T + 1 = 0

T = (1 - √(1 - 4 • X)) / (2 • X)

T = 1 + X + 2 • X² + 5 • X³ + 14 • X⁴ + ...

फिर से, शक्ति श्रृंखला विस्तार ( वोल्फ्राम अल्फा के साथ किया गया ) का उपयोग कर। यह गैर-स्पष्ट (मेरे लिए) तथ्य को व्यक्त करता है कि 1 तत्व के साथ केवल एक द्विआधारी पेड़ है, दो तत्वों के साथ 2 द्विआधारी पेड़ (दूसरा तत्व बाईं या दाईं शाखा पर हो सकता है), तीन तत्वों के साथ 5 बाइनरी पेड़ आदि। ।

तो मेरा सवाल है - मैं यहाँ क्या कर रहा हूँ? ये ऑपरेशन अनुचित लगते हैं (वैसे भी बीजगणितीय डेटा प्रकार का वर्गमूल क्या है?) लेकिन वे समझदार परिणाम देते हैं। क्या दो बीजीय डेटा प्रकारों के भागफल का कंप्यूटर विज्ञान में कोई अर्थ है, या यह सिर्फ तर्कसंगत युक्ति है?

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


19
आपको यह रोचक / प्रासंगिक लग सकता है: blog.lab49.com/archives/3011
shang

4
नहीं अगर यह हर नोड में डेटा संग्रहीत करता है। यह या तो जैसा दिखता है Branch x (Branch y Nil Nil) Nilया वैसा ही दिखता है Branch x Nil (Branch y Nil Nil)
क्रिस टेलर

4
@nlucaroni: नीचे एक मान है, न कि एक प्रकार। एक सच्चे शून्य प्रकार में उस प्रकार का कोई मान नहीं होगा, जो हास्केल में तब तक संभव नहीं है जब तक कि आप बॉटम्स को अनदेखा नहीं करते हैं। यदि आप नीचे दिए गए मानों को ध्यान में रखते हैं, तो केवल बॉटम वाले प्रकार ही यूनिट प्रकार बन जाते हैं, जो ... अधिकांश समय सहायक नहीं होता है, और बहुत सारे अन्य सामान भी टूट जाते हैं।
सीए मैककेन

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

17
इस सवाल से मेरा दिमाग
चकरा गया

जवाबों:


138

अस्वीकरण: जब आप you के लिए खाते हैं, तो यह वास्तव में काफी सही काम नहीं करता है, इसलिए मैं इसे सरलता के लिए अवहेलना करने जा रहा हूं।

कुछ प्रारंभिक बिंदु:

  • ध्यान दें कि "यूनियन" संभवतः ए + बी के लिए सबसे अच्छा शब्द नहीं है - यह विशेष रूप से दो प्रकारों का एक असंतुष्ट संघ है, क्योंकि दोनों पक्ष प्रतिष्ठित हैं भले ही उनके प्रकार समान हों। इसके लायक क्या है, अधिक सामान्य शब्द "योग" है।

  • सिंगलटन प्रकार, प्रभावी रूप से, सभी यूनिट प्रकार हैं। वे बीजगणितीय जोड़तोड़ के तहत पहचान का व्यवहार करते हैं और इससे भी महत्वपूर्ण बात यह है कि मौजूद जानकारी की मात्रा अभी भी संरक्षित है।

  • आप शायद एक शून्य प्रकार भी चाहते हैं। हास्केल वह प्रदान करता है Void। ऐसे कोई मान नहीं हैं जिनका प्रकार शून्य है, जैसे एक मान है जिसका प्रकार एक है।

यहां अभी भी एक बड़ा ऑपरेशन गायब है लेकिन मैं एक पल में वापस आ जाऊंगा।

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

  • Hask में A और B की वस्तुओं को देखते हुए , उनका उत्पाद A × B विशिष्ट (isomorphism तक) प्रकार है जो दो अनुमानों को fst देता है : A × B → A और snd : A × B → B, जहाँ किसी भी प्रकार C और फ़ंक्शंस f दिए गए हैं : C → A, g : C → B आप युग्मन f && g को परिभाषित कर सकते हैं : C → A × B जैसे कि fst that (f &&& g) = f और इसी तरह g के लिए । पैरामीट्रिकिटी सार्वभौमिक गुणों की स्वचालित रूप से गारंटी देती है और नामों की मेरी कम-से-सूक्ष्म पसंद आपको विचार देना चाहिए। (&&&)ऑपरेटर में परिभाषित किया गया है Control.Arrow, वैसे।

  • इसके बाद के संस्करण की दोहरी coproduct इंजेक्शन के साथ ए + बी है लीग : एक → ए + बी और INR : बी → ए + बी, जहां किसी भी प्रकार सी और कार्यों को देखते हुए : एक → सी, जी , आप कर सकते हैं बी → सी: नकल को परिभाषित करें ||| g : A + B → C ऐसा जो स्पष्ट समतुल्य रखता है। फिर से, पैरामीट्रिकिटी बहुत मुश्किल भागों को स्वचालित रूप से गारंटी देता है। इस मामले में, मानक इंजेक्शन बस हैं Leftऔर Rightनकल का कार्य है either

उत्पाद के कई गुण और योग प्रकार उपरोक्त से प्राप्त किए जा सकते हैं। ध्यान दें कि कोई भी सिंगलटन प्रकार Hask का एक टर्मिनल ऑब्जेक्ट है और कोई भी खाली प्रकार एक प्रारंभिक ऑब्जेक्ट है।

पूर्वोक्त लापता ऑपरेशन पर लौटकर, एक कार्टेशियन बंद श्रेणी में आपके पास घातीय वस्तुएं हैं जो श्रेणी के तीर के अनुरूप हैं। हमारे तीर फ़ंक्शंस हैं, हमारी ऑब्जेक्ट प्रकार के साथ हैं *, और प्रकार A -> Bवास्तव में प्रकार के बीजीय हेरफेर के संदर्भ में बी ए के रूप में व्यवहार करता है । यदि यह स्पष्ट नहीं है कि यह पकड़ क्यों होनी चाहिए, तो इस प्रकार पर विचार करें Bool -> A। केवल दो संभावित आदानों के साथ, उस प्रकार का एक फ़ंक्शन दो प्रकार के दो प्रकारों के लिए आइसोमॉर्फिक है A, अर्थात (A, A)। हमारे Maybe Bool -> Aपास तीन संभावित इनपुट हैं, और इसी तरह। यह भी देखें कि यदि हम बीजीय संकेतन का उपयोग करने के लिए ऊपर की नकल की परिभाषा को दोहराते हैं, तो हमें पहचान C A × C B = C मिलती हैए + बी

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

  • उत्पाद प्रकार (A, B)प्रत्येक से एक मूल्य का प्रतिनिधित्व करता है Aऔर B, स्वतंत्र रूप से लिया जाता है। तो किसी भी निश्चित मूल्य के लिए a :: A, (A, B)प्रत्येक निवासी के लिए प्रकार का एक मूल्य है B। यह निश्चित रूप से कार्टेशियन उत्पाद है, और उत्पाद प्रकार के निवासियों की संख्या कारकों के निवासियों की संख्या का उत्पाद है।

  • योग प्रकार बाईं और दाईं शाखाओं के साथ या Either A Bतो एक मान का प्रतिनिधित्व करता है। जैसा कि पहले उल्लेख किया गया है, यह एक असंतुष्ट संघ है, और योग प्रकार के निवासियों की संख्या समनियों के निवासियों की संख्या का योग है।AB

  • घातीय प्रकार B -> Aप्रकार के मूल्यों से एक मानचित्रण का प्रतिनिधित्व करता है Bप्रकार के मूल्यों को A। किसी भी निश्चित तर्क के लिए b :: B, इसका कोई भी मूल्य Aइसे सौंपा जा सकता है; प्रकार के एक मूल्य के B -> Aप्रत्येक इनपुट, जिनमें से की कई प्रतियां के रूप में एक उत्पाद के बराबर है के लिए एक ऐसी मैपिंग उठाता है Aके रूप में Bनिवासी हैं, इसलिए घातांक।

हालांकि यह पहली बार सेट के रूप में व्यवहार करने के लिए आकर्षक है, कि वास्तव में इस संदर्भ में बहुत अच्छी तरह से काम नहीं करता है - हम सेट के मानक संघ के बजाय संघ की असहमति है, चौराहे या कई अन्य सेट संचालन की कोई स्पष्ट व्याख्या नहीं है, और हम आमतौर पर सेट सदस्यता (टाइप चेकर के लिए छोड़कर) की परवाह नहीं करते हैं।

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


संपादित करें: ओह, और यहां एक त्वरित बोनस है जो मुझे लगता है कि इस बिंदु को हड़ताली रूप से प्रदर्शित करता है। आपने एक टिप्पणी में उल्लेख किया है कि एक पेड़ के प्रकार के लिए T = 1 + T^2आप पहचान प्राप्त कर सकते हैं T^6 = 1, जो स्पष्ट रूप से गलत है। हालांकि, T^7 = T करता पकड़, और पेड़ों और पेड़ों की सात tuples के बीच एक द्विभाजन, सीधे निर्माण किया जा सकता cf. एंड्रियास ब्लास की "सेवेन ट्रीज़ इन वन"

Edit × 2: अन्य उत्तरों में उल्लिखित "व्युत्पन्न एक प्रकार का" निर्माण के विषय पर, आप भी उसी लेखक से इस पेपर का आनंद ले सकते हैं जो आगे विचार का निर्माण करता है, जिसमें विभाजन और अन्य रोचक व्हाट्सएप के विचार शामिल हैं।


3
यह विशेष रूप से जैसी चीज़ों से एक कूद बंद बिंदु के रूप में, एक महान विवरण है strictlypositive.org/diff.pdf
acfoltzer

26
@acfoltzer: धन्यवाद! :] और हाँ, यह एक महान कागज है जो इन विचारों को विकसित करता है। तुम्हें पता है, मुझे लगता है कि एसओ पर मेरी कुल प्रतिष्ठा का कम से कम 5% "कॉनर मैकब्राइड के कागजात में से एक को समझने में लोगों की मदद करने" के लिए जिम्मेदार ठहराया जा सकता है ...
CA मैक्कैन

45

बाइनरी पेड़ों को समीकरणों T=1+XT^2के प्रकारों में समीकरण द्वारा परिभाषित किया गया है । निर्माण द्वारा, T=(1-sqrt(1-4X))/(2X)जटिल संख्याओं की संगोष्ठी में समान समीकरण द्वारा परिभाषित किया गया है। इसलिए यह देखते हुए कि हम बीजगणितीय संरचना के समान वर्ग में समान समीकरण को हल कर रहे हैं, वास्तव में आश्चर्य नहीं होना चाहिए कि हम कुछ समानताएं देखते हैं।

पकड़ यह है कि जब हम जटिल संख्याओं की संगोष्ठी में बहुपदों के बारे में सोचते हैं, तो हम आम तौर पर इस तथ्य का उपयोग करते हैं कि जटिल संख्याएं एक अंगूठी या यहां तक ​​कि एक क्षेत्र बनाती हैं, इसलिए हम खुद को ऐसे घटाव जैसे ऑपरेशन का उपयोग करते हुए पाते हैं जो अर्धवृत्तियों पर लागू नहीं होते हैं। लेकिन हम अक्सर अपने तर्कों से घटाव को समाप्त कर सकते हैं यदि हमारे पास एक नियम है जो हमें एक समीकरण के दोनों ओर से रद्द करने की अनुमति देता है। यह इस तरह से साबित होता है कि फियोर और लेइनस्टर ने साबित किया है कि रिंग के बारे में कई तर्क सेमिरिंग में स्थानांतरित किए जा सकते हैं।

इसका मतलब यह है कि रिंगों के बारे में आपके बहुत से गणितीय ज्ञान मज़बूती से प्रकारों में स्थानांतरित किए जा सकते हैं। नतीजतन, जटिल संख्या या बिजली श्रृंखला (औपचारिक बिजली श्रृंखला के रिंग में) से जुड़े कुछ तर्क पूरी तरह से कठोर तरीके से टाइप कर सकते हैं।

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

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

मज़े करो!


इस भेदभाव / एक छेद संदर्भ सामग्री बहुत अच्छा है। चलो देखते हैं कि क्या मेरे पास यह सीधा है। बीजीय प्रतिनिधित्व के साथ एक जोड़ी P = X^2में व्युत्पन्न है dP = X + X, इसलिए Eitherजोड़ी का एक-छेद संदर्भ है। यह बहुत मजेदार है। हम Eitherएक जोड़ी पाने के लिए 'एकीकृत' भी कर सकते थे। लेकिन अगर हम ' Maybeटाइप ' (प्रकार के साथ M = 1 + X) को एकीकृत करने की कोशिश करते हैं, तो हमारे पास \int M = X + X^2 / 2ऐसा होना चाहिए जो निरर्थक हो (जो आधा प्रकार है?) इसका मतलब यह है कि Maybeकिसी भी अन्य प्रकार का एक-छेद संदर्भ नहीं है?
क्रिस टेलर

6
@ क्रिसट्रेलर: एक छेद वाले संदर्भ उत्पादों के अंदर स्थिति के बारे में जानकारी को संरक्षित करते हैं, अर्थात, (A,A)इसमें एक छेद के साथ Aएक सा है और आपको यह बताता है कि छेद किस तरफ है। एक Aअकेले को भरने के लिए कोई प्रतिष्ठित छेद नहीं है, यही वजह है कि आप इसे "एकीकृत" नहीं कर सकते। इस मामले में गुम सूचना का प्रकार निश्चित रूप से है 2
सीए मैककैन


@ user207442, क्या आपने भी एक पेड़ और सात पेड़ों के बीच की आपत्ति के बारे में कुछ नहीं किया? मैंने अपने उत्तर में उस बारे में एक पेपर से जोड़ा था लेकिन मैं कसम खा सकता हूं कि मुझे याद है कि मैं आपके ब्लॉग पर इसके बारे में सबसे पहले पढ़ रहा हूं।
सीए मैककेन 20

1
@ChrisTaylor परिमित पर (वास्तव में "विभाजित") अंतर वहाँ यह है: सख्ती से positive.org/CJ.pdf लेकिन उस बिंदु पर कॉनर को एहसास नहीं हुआ कि वह मतभेदों का वर्णन कर रहा है। मैंने इसे लिखा है, हालांकि इसका अनुसरण करना मुश्किल हो सकता है: blog.sigfpe.com/2010/08/… मैं एक पेपर लिखूंगा, लेकिन मैं उन्हें खत्म करने में बहुत अच्छा नहीं हूं।
सिगफैप

22

ऐसा लगता है कि आप जो कर रहे हैं, वह पुनरावृत्ति संबंध का विस्तार कर रहा है।

L = 1 + X  L
L = 1 + X  (1 + X  (1 + X  (1 + X  ...)))
  = 1 + X + X^2 + X^3 + X^4 ...

T = 1 + X  T^2
L = 1 + X  (1 + X  (1 + X  (1 + X  ...^2)^2)^2)^2
  = 1 + X + 2  X^2 + 5  X^3 + 14  X^4 + ...

और चूंकि प्रकार पर संचालन के लिए नियम अंकगणितीय संचालन के लिए नियमों की तरह काम करते हैं, आप आवर्ती संबंध का विस्तार करने के तरीके का पता लगाने में मदद करने के लिए बीजीय साधनों का उपयोग कर सकते हैं (क्योंकि यह स्पष्ट नहीं है)।


1
"चूंकि प्रकार के संचालन के लिए नियम अंकगणितीय संचालन के लिए नियमों की तरह काम करते हैं ..." - हालांकि वे नहीं करते हैं। प्रकारों के घटाव की कोई धारणा नहीं है, अकेले विभाजन और वर्गमूल हैं। इसलिए मुझे लगता है कि मेरा सवाल यह है: जब आप एक बीजीय जोड़-तोड़ से जा सकते हैं, तो यह मानते हुए Xकि वास्तविक संख्याओं का एक तत्व प्रकारों के बारे में एक वास्तविक कथन है, और इसके अलावा, जहां पत्राचार ( nवें डिग्री अवधि के गुणांक ) <> (संख्या) है nकिस प्रकार के होल्डिंग तत्व) से आते हैं?
क्रिस टेलर

1
उदाहरण के लिए, एक पेड़ के लिए अभिव्यक्ति से ( T = 1 + T^2) मैं व्युत्पन्न हो सकता है T^6 = 1(यानी समाधान x^2 - x + 1 = 0एकता की छठी जड़ें हैं) लेकिन यह स्पष्ट रूप से सच नहीं है कि एक उत्पाद प्रकार जिसमें छह बाइनरी पेड़ हैं इकाई के बराबर है ()
क्रिस टेलर

3
@ChrisTaylor, लेकिन वहाँ कुछ वहाँ हो रहा के रूप में वहाँ है, है के बीच एक समाकृतिकता T^7और T। सीएफ arxiv.org/abs/math/9405205
luqui

7
@ChrisTaylor, यहाँ कुछ सोचने के बारे में है। जब आप नए बीजीय संचालन जोड़ते हैं, तो आप मौजूदा लोगों के गुणों को नहीं तोड़ने की उम्मीद करते हैं। यदि आप एक ही उत्तर में दो अलग-अलग तरीकों से आ सकते हैं, तो उन्हें सहमत होना चाहिए। इसलिए, प्रदान कर रहा है सब पर किसी भी प्रतिनिधित्व के लिए L = 1 + X * L, यह था बेहतर ही एक है कि आप जब आप श्रृंखला का विस्तार मिलता है, स्थिरता द्वारा किया जाना है। अन्यथा आप परिणाम को पीछे ले जा सकते हैं ताकि वास्तविक के बारे में कुछ गलत हो सके।
लूकी

2
@ChrisTaylor वास्तव में प्रकारों के विभाजन की एक धारणा है, अधिक जानकारी के लिए "Quotient Types" की खोज करें। क्या यह बहुपद विभाजन के साथ अच्छी तरह से मेल खाता है, मुझे नहीं पता। यह काफी अव्यवहारिक होता है, इमो, लेकिन यह वहाँ से बाहर है।
डग मैकक्लेन

18

मेरे पास पूरा जवाब नहीं है, लेकिन इन जोड़तोड़ों में 'सिर्फ काम' होता है। एक प्रासंगिक पेपर फिएर और लेइनस्टर द्वारा कॉम्प्लेक्स नंबरों के रूप में श्रेणियाँ की वस्तुएं हो सकती हैं - मैं संबंधित विषय पर सिगफेक के ब्लॉग को पढ़ते समय उस पर आया था ; उस ब्लॉग के बाकी समान विचारों के लिए एक सोने की खान है और बाहर की जाँच के लायक है!

आप डेटाटाइप्स को अलग-अलग भी कर सकते हैं - जो आपको डेटाटाइप के लिए उपयुक्त जिपर मिलेगा!


12
जिपर चाल भयानक है। काश मैं इसे समझ पाता।
10

आप सीमांकित निरंतरताओं का उपयोग करके स्कीम में ज़िपर भी बना सकते हैं , जिससे आप उन्हें उदारतापूर्वक प्राप्त कर सकते हैं।
जॉन पूर्डी

10

संचारी प्रक्रियाओं के बीजगणित (एसीपी) प्रक्रियाओं के लिए समान प्रकार के भावों से संबंधित है। यह संबद्ध तटस्थ तत्वों के साथ विकल्प और अनुक्रम के लिए ऑपरेटर के रूप में जोड़ और गुणा प्रदान करता है। इनके आधार पर अन्य निर्माणों के लिए ऑपरेटर होते हैं, जैसे कि समानता और व्यवधान। Http://en.wikipedia.org/wiki/Algebra_of_Communicating_Processes देखें । ऑनलाइन एक पेपर भी है जिसका नाम "ए ब्रीफ हिस्ट्री ऑफ प्रोसेस अलजेब्रा" है।

मैं ACP के साथ प्रोग्रामिंग भाषाओं का विस्तार करने पर काम कर रहा हूं। पिछले अप्रैल में मैंने स्काला डेज 2012 में एक शोध पत्र प्रस्तुत किया, जो http://code.google.com/p/subscript/ पर उपलब्ध है।

सम्मेलन में मैंने एक डिबगर को एक बैग के समानांतर पुनरावर्ती विनिर्देश चलाने का प्रदर्शन किया:

बैग = ए; (बैग और एक)

जहां ए और इनपुट और आउटपुट कार्यों के लिए एक स्टैंड; अर्धविराम और एम्परसैंड अनुक्रम और समानता के लिए खड़े हैं। पिछले लिंक से पहुंच योग्य, SkillsMatter पर वीडियो देखें।

एक बैग विनिर्देश अधिक तुलनीय है

एल = 1 + एक्स • एल

होने वाला

बी = 1 + एक्सएंडबी

एक्सिस का उपयोग करते हुए पसंद और अनुक्रम के संदर्भ में एसीपी समानता को परिभाषित करता है; विकिपीडिया लेख देखें। मुझे आश्चर्य है कि बैग सादृश्य के लिए क्या होगा

L = 1 / (1-X)

ACP शैली प्रोग्रामिंग पाठ पार्सर्स और GUI नियंत्रकों के लिए आसान है। विनिर्देशों जैसे

searchCommand = क्लिक किया (सर्चबटन) + कुंजी (दर्ज करें)

रद्द कर दिया = क्लिक किया (रद्द करें) + कुंजी (बच)

हो सकता है कि दो परिशोधन "क्लिक" और "कुंजी" निहित (जैसे स्काला कार्यों के लिए क्या अनुमति देता है) बनाकर अधिक संक्षेप में लिखा जाए। इसलिए हम लिख सकते हैं:

searchCommand = searchButton + Enter

कैंसकमांड = कैंसलबटन + एस्केप

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

प्रक्रियाओं को साथी के रूप में इस तरह से डेटा मिलता है; इस प्रकार मैं "आइटम बीजगणित" शब्द को गढ़ा।


6

पथरी और मैकलॉरीन श्रृंखला प्रकार के साथ

यहां एक और मामूली जोड़ है - एक श्रृंखला विस्तार में गुणांक क्यों 'काम' में होना चाहिए, विशेष रूप से श्रृंखला पर ध्यान केंद्रित करते हुए, जो कि पथरी से टेलर-मैकलॉरीन दृष्टिकोण का उपयोग करके प्राप्त किया जा सकता है। NB: उदाहरण श्रृंखला विस्तार आप जोड़ तोड़ सूची के प्रकार एक Maclaurin श्रृंखला है।

चूँकि अन्य उत्तर और टिप्पणियाँ बीजगणितीय प्रकार के भावों (रकम, उत्पाद और घातांक) के व्यवहार से निपटते हैं, इसलिए यह उत्तर उस विवरण को खत्म कर देगा और टाइप 'कैलकुलस' पर ध्यान केंद्रित करेगा।

आप इस उत्तर में कुछ भारी उठाने वाले अल्पविरामों को देख सकते हैं। इसके दो कारण हैं:

  • हम एक डोमेन से दूसरे तक की व्याख्याओं को देने के व्यवसाय में हैं और इस तरह की विदेशी धारणाओं को इस तरह से प्रस्तुत करना उचित लगता है।
  • कुछ धारणाओं को अधिक सख्ती से औपचारिक रूप दिया जा सकेगा, लेकिन आकार और विचार अधिक महत्वपूर्ण लगते हैं (और लिखने के लिए कम जगह लेते हैं)।

मैकलॉरिन श्रृंखला की परिभाषा

किसी फ़ंक्शन की Maclaurin श्रृंखला को किसf : ℝ → ℝ रूप में परिभाषित किया गया है

f(0) + f'(0)X + (1/2)f''(0)X² + ... + (1/n!)f⁽ⁿ⁾(0)Xⁿ + ...

जहां का f⁽ⁿ⁾अर्थ है nव्युत्पन्न f

प्रकार के साथ व्याख्या के रूप में मैकलॉरिन श्रृंखला की समझ बनाने में सक्षम होने के लिए, हमें यह समझने की आवश्यकता है कि हम एक प्रकार के संदर्भ में तीन चीजों की व्याख्या कैसे कर सकते हैं:

  • (संभवतः कई) व्युत्पन्न
  • के लिए एक समारोह लागू करने 0
  • जैसे शब्द (1/n!)

और यह पता चला है कि विश्लेषण से इन अवधारणाओं के प्रकार दुनिया में उपयुक्त समकक्ष हैं।

'उपयुक्त समकक्ष' से मेरा क्या अभिप्राय है? इसमें एक आइसोमोर्फिज्म का स्वाद होना चाहिए - अगर हम दोनों दिशाओं में सच्चाई को संरक्षित कर सकते हैं, तो एक संदर्भ में व्युत्पन्न तथ्यों को दूसरे में स्थानांतरित किया जा सकता है।

पथरी प्रकार के साथ

तो एक प्रकार की अभिव्यक्ति के व्युत्पन्न का क्या अर्थ है? यह पता चला है कि प्रकार के अभिव्यक्तियों और फंक्शंस के एक बड़े और अच्छी तरह से व्यवहार ('अलग') वर्ग के लिए, एक प्राकृतिक ऑपरेशन है जो एक उपयुक्त व्याख्या होने के लिए समान रूप से पर्याप्त व्यवहार करता है!

पंचलाइन को खराब करने के लिए, भेदभाव के अनुरूप ऑपरेशन 'वन-होल संदर्भ' बनाने के लिए है। इस विशेष बिंदु पर और विस्तार करने के लिए यह एक उत्कृष्ट स्थान है, लेकिन एक-छेद के संदर्भ ( da/dx) की मूल अवधारणा यह है कि यह xएक शब्द (प्रकार के a) से एक विशेष प्रकार ( ) के एकल सबमिट को निकालने के परिणाम को संरक्षित करता है। सभी अन्य जानकारी, जिसमें आवश्यक है कि सबमिट का मूल स्थान निर्धारित किया जाए। उदाहरण के लिए, एक सूची के लिए एक-छेद के संदर्भ का प्रतिनिधित्व करने का एक तरीका दो सूचियों के साथ है: एक आइटम के लिए जो एक निकाले जाने से पहले आया था, और एक आइटम जो बाद में आया था।

इस ऑपरेशन को विभेदन के साथ पहचानने की प्रेरणा निम्नलिखित टिप्पणियों से मिलती है। हम da/dxटाइप aके छेद के साथ टाइप के लिए एक-छेद संदर्भों के प्रकार का मतलब लिखते हैं x

d1/dx = 0
dx/dx = 1
d(a + b)/dx = da/dx + db/dx
d(a × b)/dx = a × db/dx + b × da/dx
d(g(f(x))/dx = d(g(y))/dy[f(x)/a] × df(x)/dx

यहाँ, 1और 0ठीक एक और वास्तव में शून्य निवासियों क्रमशः प्रकार का प्रतिनिधित्व करते हैं, और +और ×हमेशा की तरह योग और उत्पाद प्रकार के प्रतिनिधित्व करते हैं। fऔर gटाइप फ़ंक्शंस, या एक्सप्रेशन फ़ार्मर्स का प्रतिनिधित्व करने के लिए उपयोग किया जाता है, और [f(x)/a]इसका अर्थ है कि पूर्ववर्ती अभिव्यक्ति में f(x)प्रत्येक के लिए प्रतिस्थापन का संचालन a

यह एक बिंदु मुक्त शैली में लिखा जा सकता है , इस f'प्रकार के व्युत्पन्न कार्य का अर्थ है f, इस प्रकार:

(x ↦ 1)' = x ↦ 0
(x ↦ x)' = x ↦ 1
(f + g)' = f' + g'
(f × g)' = f × g' + g × f'
(g ∘ f)' = (g' ∘ f) × f'

जो बेहतर हो सकता है।

यदि हम प्रकार और प्रकार्य के आइसोमोर्फिज़्म वर्गों का उपयोग करके डेरिवेटिव को परिभाषित करते हैं, तो एनबी की समानताएं कठोर और सटीक बनाई जा सकती हैं।

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

अब हम विभेदन की व्याख्या कर सकते हैं, nएक प्रकार की अभिव्यक्ति के वें 'व्युत्पन्न' का dⁿe/dxⁿक्या अर्थ है? यह एक प्रकार का प्रतिनिधित्व-प्रकार का nसंदर्भ है: ऐसे शब्द, जब nप्रकार की xपैदावार के संदर्भ में 'भरा' होता है e(1/n!)बाद में आने वाले ' ' से संबंधित एक और महत्वपूर्ण अवलोकन है ।

एक प्रकार के फफूंद का अपरिवर्तनीय हिस्सा: एक फंक्शन को 0 पर लागू करना

0टाइप दुनिया में हमारे पास पहले से ही एक व्याख्या है: एक खाली प्रकार जिसमें कोई सदस्य नहीं है। इसका मतलब क्या है, एक संयोजन के दृष्टिकोण से, इसके लिए एक प्रकार का फ़ंक्शन लागू करने के लिए? अधिक ठोस शब्दों में, मान fलेना एक प्रकार्य है, क्या f(0)दिखता है? खैर, हमारे पास निश्चित रूप से किसी भी प्रकार की पहुंच नहीं है 0, इसलिए किसी भी निर्माण की f(x)आवश्यकता xनहीं है। जो बचा है वह उन शब्दों में है जो उनकी अनुपस्थिति में सुलभ हैं, जिन्हें हम 'अपरिवर्तनीय' या 'निरंतर' प्रकार का हिस्सा कह सकते हैं।

एक स्पष्ट उदाहरण के लिए, Maybeफ़नकार को लें, जिसे बीजगणितीय रूप से दर्शाया जा सकता है x ↦ 1 + x। जब हम इसे लागू करते हैं 0, तो हम प्राप्त करते हैं 1 + 0- यह ऐसा ही है 1: केवल संभव मूल्य Noneमान है। एक सूची के लिए, इसी तरह, हम खाली सूची के अनुरूप शब्द प्राप्त करते हैं।

जब हम इसे वापस लाने और प्रकार की व्याख्या f(0)एक संख्या के रूप में सोचा जा सकता है के रूप में गिनती प्रकार के कितने पदों की f(x)(किसी के लिए xएक करने के लिए) प्राप्त किया जा सकता उपयोग के बिना x: अर्थात, 'खाली की तरह' पदों की संख्या ।

इसे एक साथ रखना: मैकलॉरिन श्रृंखला की पूरी व्याख्या

मुझे डर है कि मैं (1/n!)एक प्रकार के रूप में एक उचित प्रत्यक्ष व्याख्या के बारे में नहीं सोच सकता ।

यदि हम मानते हैं, हालांकि, f⁽ⁿ⁾(0)उपरोक्त के प्रकाश में प्रकार , हम देखते हैं कि यह एक प्रकार की nअवधि के लिए -place संदर्भों के प्रकार के रूप में व्याख्या की जा सकती है f(x)जिसमें पहले से ही शामिल नहीं है x - अर्थात, जब हम उन्हें 'एकीकृत' करते nहैं , जिसके परिणामस्वरूप शब्द में वास्तव में n x एस है, और नहीं, कम नहीं। फिर f⁽ⁿ⁾(0)एक नंबर के रूप में टाइप की व्याख्या (जैसा कि मैकलॉरिन श्रृंखला के गुणांक में है f) केवल इस तरह के खाली-खाली nसंदर्भों की एक गिनती है । हम लगभग वहाँ हैं!

लेकिन (1/n!)आखिर होता कहां है ? प्रकार 'भेदभाव' की प्रक्रिया की जांच करना हमें दिखाता है कि, जब कई बार लागू किया जाता है, तो यह 'ऑर्डर' को संरक्षित करता है जिसमें सबट्रेम्स निकाले जाते हैं। उदाहरण के लिए, (x₀, x₁)टाइप की अवधि x × xऔर दो बार 'छेद बनाने' के संचालन पर विचार करें । हमें दोनों क्रम मिलते हैं

(x₀, x₁)  ↝  (_₀, x₁)  ↝  (_₀, _₁)
(x₀, x₁)  ↝  (x₀, _₀)  ↝  (_₁, _₀)
(where _ represents a 'hole')

भले ही दोनों एक ही शब्द से आते हैं, क्योंकि 2! = 2दो तत्वों को दो से लेने के तरीके हैं , संरक्षण क्रम। सामान्य तौर पर, तत्वों को लेने के तरीके हैंn! । तो एक फ़न्क्टर प्रकार के कॉन्फ़िगरेशन की संख्या की गणना करने के लिए जिसमें तत्व होते हैं, हमें प्रकार को गिनना होगा और इसके द्वारा विभाजित करना होगा , ठीक उसी तरह जैसे कि मैक्लॉरिन श्रृंखला के गुणांकों में होता है।nnnf⁽ⁿ⁾(0)n!

तो विभाजित करके n!केवल स्वयं के रूप में व्याख्या करने योग्य हो जाता है।

अंतिम विचार: 'पुनरावर्ती' परिभाषाएं और विश्लेषणात्मकता

सबसे पहले, कुछ अवलोकन:

  • यदि कोई फ़ंक्शन f: ℝ → a में एक व्युत्पन्न है, तो यह व्युत्पन्न अद्वितीय है
  • इसी तरह, यदि कोई फ़ंक्शन f: function → analyt एनालिटिक है, तो इसकी एक समान बहुपद श्रृंखला है

चूंकि हमारे पास श्रृंखला नियम है, हम अंतर्निहित भेदभाव का उपयोग कर सकते हैं , अगर हम प्रकार व्युत्पन्न को आइसोमोर्फिज्म वर्गों के रूप में औपचारिक रूप देते हैं। लेकिन निहित विभेदन किसी विदेशी युद्धाभ्यास जैसे घटाव या विभाजन की आवश्यकता नहीं है! तो हम इसका उपयोग पुनरावर्ती प्रकार की परिभाषाओं का विश्लेषण करने के लिए कर सकते हैं। आपकी सूची का उदाहरण लेने के लिए, हमारे पास है

L(X) ≅ 1 + X × L(X)
L'(X) = X × L'(X) + L(X)

और फिर हम मूल्यांकन कर सकते हैं

L'(0) = L(0) = 1

Maclaurin श्रृंखला में गुणांक प्राप्त करने के लिए ।

लेकिन जब से हम आश्वस्त हैं कि ये अभिव्यक्तियाँ वास्तव में 'भिन्न' हैं, यदि केवल निहित हैं, और चूंकि हमारे पास कार्यों के साथ पत्राचार है with → ℝ, जहां डेरिवेटिव निश्चित रूप से अद्वितीय हैं, तो हम निश्चिंत हो सकते हैं कि भले ही हम मूल्यों का उपयोग कर प्राप्त करें ' अवैध 'संचालन, परिणाम मान्य है।

अब, इसी तरह, कार्यों के साथ पत्राचार (क्या यह एक समरूपता है?) We → to के कारण, दूसरे अवलोकन का उपयोग करने के लिए, हम जानते हैं कि, बशर्ते कि हम संतुष्ट हैं कि एक फ़ंक्शन में एक मैकलॉरीन श्रृंखला है, अगर हम किसी भी श्रृंखला को पा सकते हैं? सभी , ऊपर उल्लिखित सिद्धांतों को कठोर बनाने के लिए लागू किया जा सकता है।

कार्यों की संरचना के बारे में आपके प्रश्न के लिए, मुझे लगता है कि श्रृंखला नियम एक आंशिक उत्तर प्रदान करता है।

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

अब, निश्चित रूप से यह केवल एक ही तरीका है कि यहां क्या चल रहा है और शायद कई अन्य तरीके हैं।

सारांश: टीएल; डीआर

  • टाइप 'भेदभाव' ' छेद बनाने ' से मेल खाता है ।
  • उस फ़नकार के लिए 0हमें 'खाली-समान' शब्द प्राप्त करने के लिए एक फ़ंक्टर लगाने से ।
  • Maclaurin पॉवर श्रृंखला इसलिए (कुछ हद तक) कड़ाई से एक निश्चित प्रकार के तत्वों के साथ एक फ़नकार के सदस्यों की संख्या की गणना करने के लिए अनुरूप है।
  • निहित विभेदन यह अधिक जलराशि बनाता है।
  • डेरिवेटिव की विशिष्टता और पावर सीरीज़ की विशिष्टता का मतलब है कि हम विवरणों को तोड़-मरोड़ कर पेश कर सकते हैं।

6

आश्रित प्रकार के सिद्धांत और 'मनमाने' प्रकार के कार्य

इस सवाल का मेरा पहला जवाब अवधारणाओं पर अधिक था और विवरणों पर कम और उप-भाग पर प्रतिबिंबित, 'क्या चल रहा है'; यह उत्तर एक ही होगा लेकिन उपवर्ग पर केंद्रित होगा, 'क्या हम मनमाने प्रकार के कार्य कर सकते हैं?'।

योग और उत्पाद के बीजीय संचालन के लिए एक विस्तार तथाकथित 'बड़े ऑपरेटर' हैं, जो एक अनुक्रम के योग और उत्पाद का प्रतिनिधित्व करते हैं (या अधिक सामान्यतः, एक डोमेन पर एक फ़ंक्शन का योग और उत्पाद) आमतौर पर लिखा Σऔर Πक्रमशः। सिग्मा नोटेशन देखें ।

तो योग है

a + aX + aX² + ...

लिखा जा सकता है

Σ[i  ℕ]aX

aउदाहरण के लिए वास्तविक संख्याओं का कुछ क्रम कहां है। उत्पाद के Πबजाय के साथ इसी तरह का प्रतिनिधित्व किया जाएगा Σ

जब आप दूर से देखते हैं, तो इस तरह की अभिव्यक्ति 'मनमाने' कार्य में बहुत कुछ दिखती है X; हम पाठ्यक्रम से अभिव्यंजक श्रृंखला और उनके संबंधित विश्लेषणात्मक कार्यों तक सीमित हैं। क्या यह एक प्रकार के सिद्धांत में प्रतिनिधित्व के लिए एक उम्मीदवार है? निश्चित रूप से!

इन अभिव्यक्तियों के प्रकारों का वर्ग, जो इन अभिव्यक्तियों का तत्काल प्रतिनिधित्व करता है, 'आश्रित' प्रकार के सिद्धांतों का वर्ग है: आश्रित प्रकारों के साथ सिद्धांत। स्वाभाविक रूप से हमारे पास शब्दों पर निर्भर है, और प्रकार के कार्यों के साथ हास्केल जैसी भाषाओं में और प्रकारों के आधार पर मात्रा का ठहराव, शब्द और प्रकार। एक निर्भर सेटिंग में, हमारे पास शर्तों के आधार पर अतिरिक्त प्रकार होते हैं। हास्केल एक भरोसेमंद टाइप की गई भाषा नहीं है, हालाँकि निर्भर प्रकारों की कई विशेषताओं का अनुकरण किया जा सकता है को भाषा को थोड़ा यातना देकर जोड़ा

करी-हावर्ड और आश्रित प्रकार

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

बस टाइप किए गए लैम्ब्डा कैलकुलस के लिए करी-हावर्ड आइसोमोर्फिज्म के लिए एक परिचय के लिए, यहां देखें । एक उदाहरण के रूप में, अगर हम साबित करना चाहते हैं तो हमें साबित A ∧ Bकरना होगा Aऔर साबित करना होगा B; एक संयुक्त प्रमाण केवल प्रमाणों की एक जोड़ी है: प्रत्येक संयोजन के लिए एक।

प्राकृतिक कटौती में:

Γ  A    Γ  B
Γ  A  B

और बस टाइप किए गए लैम्ब्डा कैलकुलस में:

Γ  a : A    Γ  b : B
Γ  (a, b) : A × B

इसी तरह के पत्राचार मौजूद हैं और योग प्रकार, और फ़ंक्शन प्रकार, और विभिन्न उन्मूलन नियम।

एक अप्राप्य (सहज रूप से गलत) प्रस्ताव एक निर्जन प्रकार से मेल खाता है।

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

केवल रचनात्मक प्रमाणों को ध्यान में रखते हुए, क्या प्रमाण बनता है ∀x ∈ X.P(x)? हम इसे xअपने प्रस्‍तावित प्रस्‍तावों ( P(x)) के प्रमाणों के रूप में लेते हुए, प्रमाण समारोह के रूप में सोच सकते हैं । तो प्रकार के सदस्य (प्रमाण) (प्रस्ताव) ∀x : X.P(x)'आश्रित कार्य' होते हैं, जो प्रत्येक xके Xलिए एक प्रकार का शब्द देते हैं P(x)

किस बारे में ∃x ∈ X.P(x)? हम के किसी भी सदस्य की जरूरत है X, xएक साथ का कोई प्रमाण P(x)। तो सदस्यों का प्रकार (प्रस्ताव) के (सबूत) ∃x : X.P(x)एक प्रतिष्ठित अवधि: 'निर्भर जोड़े' कर रहे हैं xमें X, एक साथ प्रकार के एक पद के साथ P(x)

संकेतन: मैं उपयोग करूँगा

x  X...

वर्ग के सदस्यों के बारे में वास्तविक विवरण के लिए X, और

x : X...

प्रकार के लिए सार्वभौमिक परिमाण के अनुरूप प्रकार के भाव X। इसी तरह के लिए

संयुक्त विचार: उत्पाद और रकम

साथ ही प्रस्ताव के साथ प्रकारों के करी-हावर्ड पत्राचार, हमारे पास संख्याओं और कार्यों के साथ बीजीय प्रकार के दहनशील पत्राचार हैं, जो इस प्रश्न का मुख्य बिंदु है। खुशी से, यह ऊपर उल्लिखित निर्भर प्रकारों तक बढ़ाया जा सकता है!

मैं मापांक अंकन का उपयोग करूंगा

|A|

प्रकार के 'आकार' का प्रतिनिधित्व Aकरने के लिए, प्रकार और संख्याओं के बीच प्रश्न में उल्लिखित पत्राचार को स्पष्ट करने के लिए। ध्यान दें कि यह सिद्धांत के बाहर एक अवधारणा है; मैं यह दावा नहीं करता कि भाषा के भीतर ऐसे किसी ऑपरेटर की जरूरत है।

आइए हम प्रकार के संभावित (पूरी तरह से कम, विहित) सदस्यों की गणना करें

x : X.P(x)

जो कि प्रकार के प्रकारों की शर्तों xको लेते हुए आश्रित कार्यों Xका प्रकार है P(x)। इस तरह के प्रत्येक फंक्शन में हर टर्म के लिए एक आउटपुट होना चाहिए X, और यह आउटपुट एक विशेष प्रकार का होना चाहिए। प्रत्येक xके लिए X, तब, यह |P(x)|आउटपुट के 'विकल्प' देता है ।

पंचलाइन है

|∀x : X.P(x)| = Π[x : X]|P(x)|

बेशक जो समझ में नहीं आता Xहै IO (), लेकिन बीजीय प्रकार पर लागू होता है।

इसी प्रकार, एक शब्द का प्रकार

x : X.P(x)

जोड़े के प्रकार है (x, p)के साथ p : P(x)है, इसलिए दिए गए किसी भी xमें Xहम के किसी भी सदस्य के साथ एक उपयुक्त जोड़ी का निर्माण कर सकते P(x), दे रही है |P(x)|'विकल्प'।

अत,

|∃x : X.P(x)| = Σ[x : X]|P(x)|

उसी के साथ।

यह सही ठहराते प्रतीकों का उपयोग सिद्धांतों में निर्भर प्रकार के लिए आम अंकन Πऔर Σ, और वास्तव में कई सिद्धांतों उपर्युक्त पत्राचार के कारण, 'है' और 'योग' और 'उत्पाद' 'सभी के लिए' और के बीच के बीच के अंतर को धुंधला।

हम करीब हो रहे हैं!

वैक्टर: निर्भर ट्यूपल्स का प्रतिनिधित्व करना

क्या अब हम जैसे संख्यात्मक भावों को एनकोड कर सकते हैं

Σ[n  ℕ]X

प्रकार के रूप में?

काफी नहीं। यद्यपि हम अनौपचारिक रूप Xⁿसे हास्केल जैसे भावों के अर्थ पर विचार कर सकते हैं , जहां Xएक प्रकार और nएक प्राकृतिक संख्या है, यह संकेतन का दुरुपयोग है; यह एक प्रकार की अभिव्यक्ति है जिसमें एक संख्या है: विशिष्ट रूप से मान्य अभिव्यक्ति नहीं है।

दूसरी ओर, चित्र में आश्रित प्रकारों के साथ, संख्याओं वाले प्रकार ठीक बिंदु है; वास्तव में, निर्भर ट्यूपल्स या 'वैक्टर' इस बात का एक बहुत ही सामान्य रूप से उद्धृत उदाहरण हैं कि निर्भर प्रकार सूची पहुंच जैसे संचालन के लिए व्यावहारिक प्रकार-स्तरीय सुरक्षा कैसे प्रदान कर सकते हैं । एक वेक्टर केवल एक सूची है जिसमें इसकी लंबाई के बारे में टाइप-स्तर की जानकारी है: ठीक उसी प्रकार जैसे हम अभिव्यक्ति के प्रकार के लिए हैं Xⁿ

इस उत्तर की अवधि के लिए, चलो

Vec X n

लंबाई के प्रकार हो -Type मूल्यों के nवैक्टर X

तकनीकी रूप से nयहां एक वास्तविक प्राकृतिक संख्या के बजाय एक प्राकृतिक संख्या की प्रणाली में एक प्रतिनिधित्व है। हम Natपीनो शैली में प्राकृतिक संख्या ( ) को या तो शून्य ( 0) या Sकिसी अन्य प्राकृतिक संख्या के उत्तराधिकारी ( ) के रूप में दर्शा सकते हैं , और n ∈ ℕमैं ˻n˼उस शब्द का अर्थ लिखने के लिए Natजिसमें प्रतिनिधित्व करता है n। उदाहरण के लिए, ˻3˼है S (S (S 0))

तो हमारे पास हैं

|Vec X ˻n˼| = |X|ⁿ

किसी के लिए n ∈ ℕ

नेट प्रकार: प्रकार के लिए to शब्दों को बढ़ावा देना

अब हम जैसे भावों को सांकेतिक शब्दों में बदल सकते हैं

Σ[n  ℕ]X

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

'मनमाना' कार्यों के लिए पहेली का एक अंतिम टुकड़ा कैसे सांकेतिक शब्दों में बदलना है, के लिए

f :   

जैसे भाव

Σ[n  ℕ]f(n)X

ताकि हम एक बिजली श्रृंखला के लिए मनमाने ढंग से गुणांक लागू कर सकें।

हम पहले से ही संख्याओं के साथ बीजीय प्रकारों के पत्राचार को समझते हैं, जिससे हम प्रकारों से संख्याओं तक मैप कर सकते हैं और कार्यों को संख्यात्मक कार्यों के लिए टाइप कर सकते हैं। हम दूसरे रास्ते भी जा सकते हैं! - एक प्राकृतिक संख्या लेते हुए, स्पष्ट रूप से एक निश्चित बीजीय प्रकार होता है, जिसमें कई शब्द सदस्य होते हैं, हमारे पास निर्भर प्रकार होते हैं या नहीं। हम इसे आसानी से इंडक्शन के प्रकार सिद्धांत के बाहर साबित कर सकते हैं । सिस्टम के अंदर हमें प्राकृतिक नंबरों से लेकर प्रकारों तक के नक्शे की जरूरत है ।

एक मनभावन अहसास यह है कि, एक बार जब हमारे पास आश्रित प्रकार होते हैं, तो पुनरावृत्ति द्वारा निर्माण और निर्माण द्वारा प्रमाण समान रूप से समान हो जाते हैं - वास्तव में वे कई सिद्धांतों में एक ही चीज हैं। चूँकि हम प्रेरण द्वारा सिद्ध कर सकते हैं कि प्रकार मौजूद हैं जो हमारी आवश्यकताओं को पूरा करते हैं, तो क्या हमें उनका निर्माण करने में सक्षम नहीं होना चाहिए?

टर्म स्तर पर प्रकारों का प्रतिनिधित्व करने के कई तरीके हैं। मैं यहाँ एक काल्पनिक हास्केलिश संकेतन का उपयोग करूँगा *, जो कि प्रकारों के ब्रह्मांड के लिए है, खुद को आमतौर पर एक निर्भर सेटिंग में एक प्रकार माना जाता है। 1

इसी तरह, ' -Limination' को नोट करने के कम से कम उतने ही तरीके हैं, जितने निर्भर प्रकार के सिद्धांत हैं। मैं एक हास्केलिश पैटर्न-मिलान संकेतन का उपयोग करूंगा।

हम एक मानचित्रण की जरूरत है, αसे Natकरने के लिए *, संपत्ति के साथ

n  ℕ.|α ˻n˼| = n.

निम्नलिखित स्यूडोडेफिनिशन पर्याप्त है।

data Zero -- empty type
data Successor a = Z | Suc a -- Successor ≅ Maybe

α : Nat -> *
α 0 = Zero
α (S n) = Successor  n)

तो हम देखते हैं कि αउत्तराधिकारी के व्यवहार को दर्पण करता है S, जिससे यह एक प्रकार का समरूपता बन जाता है। Successorएक प्रकार्य फ़ंक्शन है जो एक प्रकार के सदस्यों की संख्या में 'एक जोड़ता है'; वह है, |Successor a| = 1 + |a|किसी भी aपरिभाषित आकार के साथ।

उदाहरण के लिए α ˻4˼(जो है α (S (S (S (S 0))))), है

Successor (Successor (Successor (Successor Zero)))

और इस प्रकार की शर्तें हैं

Z
Suc Z
Suc (Suc Z)
Suc (Suc (Suc Z))

हमें बिल्कुल चार तत्व दे रहा है |α ˻4˼| = 4:।

इसी तरह, किसी के लिए भी n ∈ ℕ, हमारे पास है

 ˻n˼| = n

जैसी ज़रूरत।

  1. कई सिद्धांतों की आवश्यकता है कि सदस्य *केवल प्रकार के प्रतिनिधि हैं, और एक ऑपरेशन *को उनके संबंधित प्रकारों के प्रकार से स्पष्ट मानचित्रण के रूप में प्रदान किया जाता है । अन्य सिद्धांत शाब्दिक प्रकारों को स्वयं को अवधि-स्तरीय निकाय होने की अनुमति देते हैं।

'मनमाना' कार्य?

अब हमारे पास एक प्रकार के रूप में पूरी तरह से सामान्य बिजली श्रृंखला को व्यक्त करने का उपकरण है!

श्रृंखला

Σ[n  ℕ]f(n)X

प्रकार बन जाता है

n : Nat f˼ n) × (Vec X n)

˻f˼ : Nat → Natसमारोह की भाषा के भीतर कुछ उपयुक्त प्रतिनिधित्व कहाँ है f। हम इसे इस प्रकार देख सकते हैं।

|∃n : Nat f˼ n) × (Vec X n)|
    = Σ[n : Nat]|α f˼ n) × (Vec X n)|          (property of  types)
    = Σ[n  ℕ]|α f˼ ˻n˼) × (Vec X ˻n˼)|        (switching Nat for ℕ)
    = Σ[n  ℕ]|α ˻f(n × (Vec X ˻n˼)|           (applying ˻f˼ to ˻n˼)
    = Σ[n  ℕ]|α ˻f(n)˼||Vec X ˻n˼|              (splitting product)
    = Σ[n  ℕ]f(n)|X|ⁿ                           (properties of α and Vec)

बस यह 'मनमानी' कैसे है? हम केवल इस विधि द्वारा पूर्णांक गुणांक तक ही सीमित नहीं हैं, बल्कि प्राकृतिक संख्या तक सीमित हैं। इसके अलावा, fकुछ भी हो सकता है, निर्भर प्रकारों के साथ एक ट्यूरिंग पूरी भाषा को देखते हुए , हम प्राकृतिक संख्या गुणांक के साथ किसी भी विश्लेषणात्मक कार्य का प्रतिनिधित्व कर सकते हैं।

मैंने इस के साथ बातचीत की जांच नहीं की है, उदाहरण के लिए, List X ≅ 1/(1 - X)इस संदर्भ में इस तरह के नकारात्मक और गैर-पूर्णांक 'प्रकार' के बारे में क्या संभव हो सकता है।

उम्मीद है कि यह उत्तर किसी तरह से यह पता लगाने के लिए जाता है कि हम कितने प्रकार के मनमाने कार्यों के साथ जा सकते हैं।

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