"निर्भर प्रकार" होने से हमें क्या हासिल होता है?


13

मुझे लगा कि मैं आश्रित टाइपिंग (DT) को ठीक से समझ रहा हूं, लेकिन इस सवाल का जवाब: /cstheory/30651/why-was-there-a-need-for-martin-l%C3% B6f-to-create-अंतर्ज्ञान-प्रकार-सिद्धांत मुझे अन्यथा सोच रहा था।

डीटी पर पढ़ने के बाद और समझने की कोशिश कर रहे हैं कि वे क्या हैं, मैं आश्चर्य करने की कोशिश कर रहा हूं, डीटी की इस धारणा से हमें क्या हासिल होता है? वे केवल टाइप किए गए लैम्ब्डा कैलकुलस (STLC) की तुलना में अधिक लचीले और शक्तिशाली प्रतीत होते हैं, हालांकि मैं बिल्कुल "कैसे / क्यों" नहीं समझ सकता।

वह क्या है जो हम DTLC के साथ कर सकते हैं जो STLC के साथ नहीं किया जा सकता है? DTs को जोड़ने जैसा लगता है कि सिद्धांत और अधिक जटिल हो जाता है, लेकिन क्या लाभ है?

उपरोक्त प्रश्न के उत्तर से:

डी ब्रूजन और हॉवर्ड द्वारा आश्रित प्रकार प्रस्तावित किए गए थे जो पहले प्रस्ताव के तर्क के लिए करी-हावर्ड पत्राचार का प्रस्ताव करना चाहते थे।

यह कुछ स्तर पर समझ में आता है, लेकिन मैं अभी भी "कैसे / क्यों" की बड़ी तस्वीर को समझने में असमर्थ हूं? हो सकता है एक उदाहरण स्पष्ट रूप से एफओ लॉजिक को सीएच पत्राचार के इस विस्तार को दिखाने में मदद कर सकता है, यह समझने में बिंदु घर को हिट कर सकता है कि डीटी के साथ क्या बड़ा सौदा है? मुझे यकीन नहीं है कि मैं इसे समझना चाहता हूं।


1
क्या आपने उन्हें गुमराह किया है? क्या आपने Coq के बारे में सुना है, जो एक प्रमेय है जो कि आश्रित प्रकार पर निर्मित है। क्या आप जानते हैं कि 4 रंग प्रमेय ने Coq का उपयोग करके सिद्ध किया है?
डेव क्लार्क

2
मैंने वास्तव में किया था। Google के लिए मुश्किल यह है कि वह अतिरिक्त "शक्ति" (बेहतर शब्द की कमी के लिए) क्या है जो डीटीएस सिद्धांत, सहज ज्ञान युक्त बोलने के लिए उधार देता है?
पीएचडी

1
क्यों? आश्रित प्रकार आपको अधिक प्रोग्राम टाइप करने की अनुमति देते हैं जबकि अभी भी सुरक्षित हैं। कैसे? कार्यक्रमों के साथ प्रकारों को मानकीकृत करके।
मार्टिन बर्गर

@MartinBerger - क्या आप "अधिक कार्यक्रमों" पर विस्तार से बता सकते हैं? सैद्धांतिक दृष्टिकोण से "अधिक" मैं क्या कर सकता / सकती हूं?
पीएचडी

2
@DaveClarke कि Coq, अपने फैंसी प्रकारों के साथ, का उपयोग फैंसी चीजों को करने के लिए किया गया है, इसका मतलब यह नहीं है कि उन फैंसी चीजों को उनके फैंसी प्रकारों की आवश्यकता होती है। उदाहरण के लिए ट्वेल्व को प्रमुख सफलताएँ मिली हैं (जैसे कि SML की शुद्धता का प्रमाण), और यह केवल दूसरी क्रम है, उच्च-क्रम नहीं। मैंने देखा है कि पहले आदेश तर्क के साथ कुछ बहुत बड़ी प्रणालियां साबित हुईं।
गिल्स एसओ- बुराई को रोकना '

जवाबों:


22

मेरी टिप्पणी का विस्तार करना: आश्रित प्रकार अधिक कार्यक्रम टाइप कर सकते हैं। "अधिक" बस का अर्थ है कि निर्भर प्रकारों के साथ टाइप किए जाने वाले कार्यक्रमों का सेट, बस टाइप किए गए -calculus (STLC) में टाइप किए गए कार्यक्रमों का एक उचित सुपरसेट है । एक उदाहरण एल मैं एस टी 2 * 3 + 4 ( α ) , लंबाई की सूची 10 , प्रकार के तत्वों को ले जाने α । अभिव्यक्ति 2 * 3 + 4 एक ही समय एक कार्यक्रम और एक प्रकार का हिस्सा है। आप इसे STLC में नहीं कर सकते।λList23+4(α)10α23+4

प्रमुख नियम जो गैर-निर्भर प्रकारों से निर्भरता को अलग करता है वह है आवेदन:

ΓM:ABΓN:AΓMN:BΓM:ΠxA.BΓN:AΓMN:B{N/x}

बाईं ओर आपके पास STLC है, जहां परिसर के कार्यक्रम केवल निष्कर्ष के कार्यक्रम में 'प्रवाह' करते हैं। इसके विपरीत, सही पर निर्भर आवेदन शासन में, कार्यक्रम सही परिसर से में 'बहती है' प्रकार निष्कर्ष में ।N1

कार्यक्रमों द्वारा प्रकारों को पैरामीटर करने में सक्षम होने के लिए, निर्भर प्रकारों का सिंटैक्स समृद्ध होना चाहिए, और यह सुनिश्चित करने के लिए कि प्रकार अच्छी तरह से गठित हैं हम प्रकारों का एक दूसरा 'टाइपिंग सिस्टम' का उपयोग करते हैं जो प्रकारों को कसता है। इस तरह की प्रणाली अनिवार्य रूप से STLC है, लेकिन "एक स्तर ऊपर"।

आश्रित प्रकार के कई स्पष्टीकरण हैं। कुछ उदाहरण।


1 रंगों के संदर्भ में: गैर-निर्भर प्रकारों के साथ, निष्कर्ष में काले रंग के भाव परिसर में काले भावों से निर्मित होते हैं जबकि निष्कर्ष में लाल भावों का निर्माण परिसर में लाल भावों से किया जाता है। निर्भर प्रकारों के साथ रंगों को मिश्रित किया जा सकता है और निष्कर्ष के काले भागों को लाल और काले रंग से बनाया जा रहा है।


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

1
मैं आपके उदाहरण के बारे में पागल नहीं हूं, क्योंकि सूची की लंबाई सिर्फ कुछ है जो आप प्रकारों में मिटा सकते हैं और सामान्य (अन-इंडेक्सेड) सूचियों के बारे में बात करने वाले कार्यक्रम प्राप्त कर सकते हैं। यह ध्यान रखना उपयोगी हो सकता है कि ऐसे प्रकार हैं जो इस तरह के क्षरण के बाद अच्छी तरह से टाइप नहीं किए जाते हैं, उदाहरण के लिए type का प्रोग्राम , जहाँ और । Arr nArr 0=natArr (n+1)=natArr n
कोड़ी

@ कोडी मुझे यकीन नहीं है कि आपका क्या मतलब है। आश्रित प्रकार निम्न अर्थ में प्रकार विलोपन (या करने के लिए स्थापित किया जा सकता है) है: सब typeable पी के लिए: iff , जहां है चलाने के समय में कमी संबंध । (यह एक सरलीकृत विवरण है, जहाँ फ़ंक्शन एनोटेशन के बिना 'समान' कार्यक्रमों के प्रकार एनोटेशन के साथ मैप प्रोग्राम मिटा देता है।) शायद आपका मतलब कुछ अलग है? आर एक रों ( पी ) आर एक रों ( वी ) PVerase(P)erase(V)
मार्टिन बर्गर

@MartinBerger: हाँ इस मामले में मैं साधारण प्रकार पाने के लिए आश्रित प्रकारों में निर्भरता को मिटाने की बात कर रहा हूँ। एकमात्र उदाहरण जो मैं अभी सकता हूं, वह प्रमाण है कि iff सामान्य करता है (उदाहरण के लिए Barendregt की पुस्तक में )। सी सीFωCoC
कोड़ी

@ मुझे लगता है कि इस प्रकार के क्षोभ को कॉल करना असामान्य है। बेहतर नाम क्या है? शायद सरलीकरण टाइप करें?
मार्टिन बर्जर

2

प्रकार की घोषणाओं को अभिकथनों से अधिक कुछ भी न समझें। वर्तमान में, आप सभी कह सकते हैं कि isInt32 (), isCharPtr (), आदि जैसी चीजें हैं। इन विभिन्न कथनों को संकलन-समय पर जांच योग्य चुना जाता है। लेकिन इस अवधारणा का विस्तार चीजों की तरह किया जा सकता है: isCharPtr () && isNotNull ()। अशक्त संकेत एक बड़ी समस्या है। बिंदुओं को डिफ़ॉल्ट रुख के रूप में अशक्त नहीं होना चाहिए, अशक्त बिंदुओं के साथ एक ऐसा प्रकार होता है जो यह जानने के बिना निष्क्रिय नहीं होता है कि यह शून्य है या नहीं। इसी तरह की समस्याएं इस तरह की चीजें हैं: isPositiveInteger (), या isEvenNaturalNumber ()।

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