क्या सार्वभौमिक प्रकार अस्तित्वगत प्रकारों के उप-प्रकार या विशेष मामले हैं?


20

मैं जानना चाहता हूँ कि क्या वैश्विक-मात्रा निर्धारित प्रकार चाहते हैं Ta :

Ta=X:{aX,f:X{T,F}}
, एक उप प्रकार, या विशेष मामला है एक existentially-मात्रा निर्धारित की टाइप Te समान हस्ताक्षर से:
Te=X:{aX,f:X{T,F}}

मैं कहेंगे "हाँ": अगर कुछ सच "सभी एक्स के लिए" है ( X ), तो यह भी सच है "कुछ एक्स के लिए" होना चाहिए ( X )। यही कारण है, 'के साथ एक बयान है ' बस 'के साथ एक ही बयान का एक और अधिक सीमित संस्करण है :'

X,P(X)?X,P(X).

क्या मैं कहीं गलत हूं?

पृष्ठभूमि: मैं यह क्यों पूछ रहा हूं?

मैं यह समझने के लिए कि मैं क्यों और कैसे "सार [डेटा] प्रकार अस्तित्ववादी प्रकार" के लिए अस्तित्वगत प्रकारों का अध्ययन कर रहा हूं । मैं अकेले सिद्धांत से इस अवधारणा का एक अच्छा समझ नहीं मिल सकता है; मुझे ठोस उदाहरण भी चाहिए।

दुर्भाग्य से, अच्छे कोड उदाहरणों को खोजना मुश्किल है क्योंकि अधिकांश प्रोग्रामिंग भाषाओं में केवल अस्तित्वगत प्रकारों के लिए सीमित समर्थन है। (उदाहरण के लिए, हास्केलforall या जावा के ?वाइल्डकार्ड ।) दूसरी ओर, सार्वभौमिक रूप से मात्रात्मक प्रकार "जेनरिक" के माध्यम से कई हालिया भाषाओं द्वारा समर्थित हैं।

क्या बुरा है, जेनेरिक आसानी से अस्तित्वगत प्रकारों के साथ मिश्रित होने लगता है , भी, जिससे सार्वभौमिक प्रकारों से अलग अस्तित्व को बताना भी मुश्किल हो जाता है। मैं उत्सुक हूं कि यह मिश्रण इतनी आसानी से क्यों होता है। इस प्रश्न का उत्तर इसे समझा सकता है: यदि सार्वभौमिक प्रकार वास्तव में केवल अस्तित्व के प्रकार का एक विशेष मामला है, तो यह कोई आश्चर्य नहीं है कि जेनेरिक प्रकार, जैसे जावा के List<T>, दोनों तरह से व्याख्या की जा सकती है।


1
सार्वभौमिक और अस्तित्व के बीच भी क्या अंतर है?

गणितीय रूप से, आप सही कह रहे हैं: यदि forall x. P(x)तब exists x. P(x)। प्रकारों की जाँच करते समय क्या प्रकार के सिस्टम इसे ध्यान में रखते हैं ... मुझे पता नहीं है। एक दिलचस्प सवाल के लिए +1।

1
@ दीनीन: यदि P (x) किसी x के लिए नहीं पकड़ता है , तो निश्चित रूप से anxP (x) पकड़ में नहीं आता है। जब आप शायद मतलब रखते हैं जब कोई x नहीं होता है , तो वह है ∈xPXP (x) का अर्थ Px xXP (x) नहीं है अगर X = when

1
... और ध्यान दें, यदि वे बिना किसी अंकन के दोबारा लिखे जाते हैं, तो वे अलग दिखेंगे : ∈xx∈X इंकपी(एक्स) बनाम ) xx∈X & P (x) और वह ∃xx∈X इंक पी। (X) किसी भी एक्स से तुच्छ संतुष्ट नहीं होगा एक्स से नहीं ।

1
अच्छा सवाल है। हास्केल में यह निश्चित रूप से सच है कि प्रकार का एक मान (forall b। Show b => b) एक फ़ंक्शन को पास किया जा सकता है जो एक (forall b b। B) लेता है, लेकिन इसके विपरीत, वह सबटाइबिलिटी नहीं है जिससे आप अपेक्षा करेंगे। एक घटिया रिश्ता। लेकिन निश्चित रूप से जब आप प्रकारों के बारे में बात करते हैं, तो आपको उस प्रकार की प्रणाली का उल्लेख करना चाहिए जिसे आप देख रहे हैं, खासकर यदि आपके पास अपने शब्दार्थ के लिए एक औपचारिक प्रकार बीजगणित है ...

जवाबों:


10

सबसे पहले, देखने के एक गणितीय दृष्टि से, संकेत नहीं करता है एक्स : टी , पी ( एक्स ) । निहितार्थ रखता है अगर और केवल अगर टी खाली नहीं है। हालांकि, प्रोग्रामिंग भाषाओं में, खाली प्रकार (हालांकि ऐसा होता है) से निपटना असामान्य है।x:T,P(x)x:T,P(x)T

फिर भी देखने के एक गणितीय बिंदु, से भी जब , दो ही नहीं हैं। यदि आप एक सेट शब्दार्थ देते हैं, तो T a , T e का सुपरसेट है , उसी प्रकार का नहीं। (वास्तव में यह एक सुपरसेट नहीं है; यह एक सुपरसेट के लिए आइसोमॉर्फिक के करीब है।)(x:T,P(x))(x:T,P(x))TaTe

आइए प्रोग्रामिंग भाषा सिद्धांत के करीब जाएं और देखें कि इन प्रकारों का वास्तव में क्या मतलब है। एक सार्वभौमिक प्रकार है: यदि आप एक मूल्य है एक उस प्रकार के, आप का निर्माण कर सकते एक ( एम ) किसी के लिए एम : एक्स । विशेष रूप से, यदि आपके पास एम 1 और एम 2 दोनों प्रकार के एक्स हैं , तो आप ( एम) का निर्माण कर सकते हैंTa=X.{a:X,f:Xbool}AA(M)M:XM1M2X और( एम 2 ) । संक्षेप में (और संभवतः प्रभाव में, भाषा पर निर्भर करता है) T एक प्रकार से शब्दों तक का कार्य है। जैसे, सार्वभौमिक प्रकार प्रकारपैरामीट्रिज़ेशनप्रदान करता है: सभी प्रकारों के लिए काम करने वाला एक मान। सार्वभौमिक प्रकारबहुरूपताके दिल मेंहैंA(M1)A(M2)Ta

अस्तित्व प्रकार काफी अलग जानवर है। एक मूल्य को देखते हुए बी के प्रकार टी , वहाँ केवल एक ही अवधि एन : एक्स ऐसी है कि π 1 ( बी ) = एन , और इस अवधि के लिए π 2 ( बी ) = { एक : एन , एफ :Te=X.{a:X,f:Xbool}BTeN:Xπ1(B)=N । अस्तित्वगत प्रकार एन की प्रकृति को छिपाने का एक तरीका प्रदान करता है; यह कह रहा है, “एक प्रकार मौजूद है! लेकिन मैं आपको नहीं बताऊंगा! जैसे, अस्तित्वगत प्रकार,अमूर्तताप्रदान करता है: एक विशिष्ट छिपा हुआ मूल्य। मॉड्यूल सिस्टमके दिल में विद्यमान प्रकार होते हैं।π2(B)={a:N,f:Nbool}N

हास्केल के द्वारा गुमराह न करें forall: अपने नाम के बावजूद, यह अस्तित्ववादी मात्रा का एक रूप है।

पृष्ठभूमि के लिए, मैं दृढ़ता से प्रकार और प्रोग्रामिंग भाषाओं की सिफारिश करता हूं (अध्याय 23 और 24 क्रमशः सार्वभौमिक प्रकार और अस्तित्वगत प्रकारों पर चर्चा करते हैं)। यह शोध लेखों को समझने के लिए उपयोगी पृष्ठभूमि प्रदान करेगा।


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

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

5

अपने अंतर्ज्ञान कि में एम्बेड किए जाने चाहिएएक्स एक्सपी(एक्स)एक्सपी(एक्स)

एक्स(एक्स×(एक्सबीएल))एक्सएक्स(एक्स×(एक्सबीएल))

 f (p: \forall X. (X * (X -> Bool))) = PACK X = Bool WITH p[Bool]

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

आप सही हैं कि अधिकांश प्रोग्रामिंग भाषाओं में स्पष्ट रूप से अस्तित्वगत प्रकार नहीं हैं। हालाँकि, कई में अमूर्त प्रकार होते हैं (या किसी अन्य नाम से जैसे "पैकेज" या "मॉड्यूल")। इसलिए, वे अस्तित्वगत प्रकारों के मूल्यों को व्यक्त करने में सक्षम हैं , भले ही वे ऐसे मूल्यों को प्रथम श्रेणी की संस्थाओं के रूप में नहीं मानते हैं।

एक्सपी(एक्स)Y(एक्सपी(एक्स)Y)Y। तो, किसी भी भाषा जो बहुरूपिक कार्यों का व्यवहार करती है (का) प्रकार) प्रथम श्रेणी की संस्थाओं के रूप में भी सार प्रकारों को प्रथम श्रेणी की संस्थाओं के रूप में मानने की क्षमता है।

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