रसेलियन प्रकार के सिद्धांत और प्रकार प्रणालियों के बीच संबंध


12

मुझे हाल ही में एहसास हुआ कि रसेलियन प्रकार के सिद्धांत और प्रकार प्रणालियों के बीच कुछ प्रकार के संबंध हैं, जैसे कि हास्केल में उदाहरण के लिए। दरअसल, हास्केल में कुछ प्रकार के संकेतन के बारे में लगता है कि वे टाइप थ्योरी के अग्रदूत थे। लेकिन, 1908 में IMHO, रसेल प्रेरणा रसेल के विरोधाभास से बचने के लिए था, और मुझे यकीन नहीं है कि यह कंप्यूटर विज्ञान में टाइप सिस्टम से कैसे संबंधित है।

क्या रसेल का विरोधाभास एक रूप में या किसी अन्य चीज के बारे में है, जिसकी हमें चिंता करनी होगी, उदाहरण के लिए, अगर हमारे पास किसी दिए गए भाषा में अच्छी प्रकार की प्रणाली नहीं है?

जवाबों:


8

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

यहाँ देखें

सामान्य प्रोग्रामिंग भाषाओं में प्रकार अधिक सीमित होते हैं, लेकिन मेटा सिद्धांत समान है।

रसेल के विरोधाभास के समान कुछ आश्रित प्रकार के सिद्धांत में एक प्रमुख मुद्दा है। विशेष रूप से, होने

Type : Type

आमतौर पर विरोधाभास होता है। ब्रह्मांडों के घोंसले द्वारा Coq और इसी तरह का काम

Type_0 : Type_1

लेकिन Coq में डिफ़ॉल्ट रूप से ये संख्याएँ अंतर्निहित हैं क्योंकि वे सामान्य रूप से प्रोग्रामर के लिए मायने नहीं रखते हैं।

कुछ सिस्टम (एजडा, इदरीस) में, टाइप नियम में कंपाइल फ्लैग के माध्यम से टाइप किया जाता है। यह लॉजिक्स को असंगत बनाता है, लेकिन अक्सर खोजपूर्ण प्रोग्रामिंग / आसान साबित करता है।

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


आपके विस्तृत उत्तर के लिए धन्यवाद - जहाँ तक प्रमाण जाता है, सी ++ या जावा जैसी अनिवार्य भाषाओं में कार्यक्रमों की शुद्धता को साबित करने के लिए अभी भी कोई उपकरण नहीं हैं, है ना? मैं इनमें से किसी एक पर हाथ रखना पसंद करूंगा ... मुझे एहसास है कि यह एक पूर्ण स्पर्श है। मैं Coq और Agda के बारे में जानता हूं, लेकिन C ++ या Java में लिखे कार्यक्रमों की शुद्धता को साबित करने के लिए वे सही उपकरण नहीं लगते हैं।
फ्रैंक

3
कुछ उपकरण हैं। सी के लिए कुछ, जावा के लिए कई, और एडीए के लिए टन। उदाहरण के लिए देखें: क्यों (Java, C, Ada), क्राकाटोआ (Java), या SPARK (Ada सबसे अच्छी टूलिंग के साथ सबसेट)। C ++ के लिए, हालांकि इतना नहीं। आपको YNot (Coq DSL) में भी दिलचस्पी हो सकती है।
फिलिप जेएफ

3

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

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

अपडेट : अपने प्रश्न के वास्तविक उत्तर के लिए फिलिप की प्रतिक्रिया देखें।


1
आपके उत्तर के लिए धन्यवाद। रसेल विरोधाभास से बचने के लिए संभवतः ए-ला-रसेल के विकल्प हैं। क्या इनमें से कोई भी वैकल्पिक समाधान कंप्यूटर भाषाओं में योगदान करने के लिए कुछ भी दिलचस्प होगा? मुंडन प्रकार कोड के कुछ हिस्सों के बीच स्पष्ट रूप से अनुबंध निर्दिष्ट करने के लिए बहुत उपयोगी होते हैं, और इससे पहले भी, कार्यक्रमों में सभी को शब्दार्थ देने के लिए। क्या अन्य शब्दार्थ होंगे जो कुछ अन्य प्रकार के साथ प्राप्त किए जा सकते हैं? (मुझे नहीं पता कि क्या होगा :-)
फ्रैंक

1
हां, बहुत सारे विकल्प (क्वाइन का एनएफ, जेडएफसी, आदि), लेकिन मैं संस्थापक संकट और प्रोग्रामिंग भाषाओं के बीच कोई सीधा संबंध नहीं देख सकता। यदि आप मार्टिन लोफ के प्रकार के सिद्धांत को एक प्रोग्रामिंग भाषा मानते हैं, तो वहाँ कुछ कनेक्शन हो सकता है जो अंतर्ज्ञानवाद तक वापस पहुंच जाए। जैसा कि प्रोग्रामिंग भाषाओं के शब्दार्थों के संबंध में, पीडीएल (प्रोपेलल डायनामिक लॉजिक) जैसी कुछ बुनियादी भाषाएं हैं जिनमें क्रिपके (या संभव दुनिया) शब्दार्थ हैं। लेकिन प्रकार मुझे बहुत मौलिक लगते हैं कि वे केवल पर्दे के पीछे हो सकते हैं :)
हुनान रोस्तोमैन

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

1
@Frank हर बार जब मैं स्थैतिक प्रकार (ज्यादातर रूबी) के बिना एक भाषा का उपयोग करता हूं तो मुझे अनुभव से नफरत है, क्योंकि मैं परिहार्य क्रम त्रुटियों से नफरत करता हूं । तो, यह स्वाद का मामला लगता है। मैं सहमत हूं कि शक्तिशाली प्रकार का निष्कर्ष आपको दोनों दुनिया का सर्वश्रेष्ठ दे सकता है। जो है, शायद, मुझे स्काला इतना पसंद क्यों है।
राफेल

मुझे यकीन नहीं है कि "स्वचालित रूप से" टाइप नहीं होने से रनटाइम त्रुटियां होती हैं, जैसा कि आपको लगता है कि :-) मुझे पायथन में कभी कोई समस्या नहीं थी।
फ्रैंक

3

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

  1. टाइप सिस्टम तार्किक प्रणाली और सेट सिद्धांत हैं।

  2. एक प्रकार की प्रणाली प्रत्येक गणना मूल्य के साथ एक प्रकार को जोड़ती है। इन मूल्यों के प्रवाह की जांच करके, एक प्रकार की प्रणाली यह साबित करने या सुनिश्चित करने का प्रयास करती है कि कोई प्रकार की त्रुटियां नहीं हो सकती हैं।

  3. प्रकार एक वर्गीकरण है जो विभिन्न प्रकार के डेटा की पहचान करता है, जैसे कि वास्तविक-मूल्यवान, पूर्णांक या बूलियन, जो उस प्रकार के लिए संभावित मान निर्धारित करता है; संचालन जो उस प्रकार के मूल्यों पर किया जा सकता है; डेटा का अर्थ; और उस प्रकार के मूल्यों को संग्रहीत किया जा सकता है

  4. सार डेटा प्रकार उच्च स्तरीय भाषाओं में डेटा अमूर्तता के लिए अनुमति देते हैं। एडीटी को अक्सर मॉड्यूल के रूप में लागू किया जाता है: मॉड्यूल का इंटरफ़ेस एडीटी संचालन के अनुरूप प्रक्रियाओं की घोषणा करता है। यह जानकारी छिपाने की रणनीति क्लाइंट कार्यक्रमों को परेशान किए बिना मॉड्यूल के कार्यान्वयन को बदलने की अनुमति देती है।

  5. प्रोग्रामिंग भाषा कार्यान्वयन मूल्यों पर संचालन के लिए मूल्यों की आवश्यकता और एल्गोरिदम को चुनने के लिए मूल्यों के प्रकारों का उपयोग करता है।

उद्धरण विकिपीडिया से हैं, लेकिन मैं बेहतर संदर्भ प्रदान कर सकता हूं जो एक आवश्यकता उत्पन्न होनी चाहिए।

रसेल के काम से टाइप -1 उत्पन्न हुआ, लेकिन आज वे केवल विरोधाभासों से रक्षा नहीं कर रहे हैं: होमोटोपी प्रकार सिद्धांत की टाइप की गई भाषा गणित को एक औपचारिक, मशीन-समझने योग्य भाषा में, और मनुष्य को नींव को समझने का एक नया तरीका है। गणित का। ("पुराना" तरीका एक स्वयंसिद्ध सेट सिद्धांत का उपयोग करके एन्कोडिंग है)।

टाइपिंग 2-5 कई अलग-अलग जरूरतों से प्रोग्रामिंग में पैदा हुई: बग से बचने के लिए, डेटा सॉफ्टवेयर डिजाइनरों और प्रोग्रामर के साथ काम करने के लिए, बड़े सिस्टम को डिजाइन करने और क्रमशः प्रोग्रामिंग भाषाओं को कुशलता से लागू करने के लिए।

C / C ++, Ada, Java, Python में टाइप सिस्टम रसेल के काम या बग्स से बचने की इच्छा से पैदा नहीं हुआ। वे विभिन्न प्रकार के डेटा का वर्णन करने की आवश्यकता से उत्पन्न हुए (उदाहरण के लिए "अंतिम नाम एक वर्ण स्ट्रिंग है और एक संख्या नहीं है"), सॉफ्टवेयर डिज़ाइन को संशोधित करता है और डेटा के लिए निम्न-स्तरीय अभ्यावेदन का चयन करता है। इन भाषाओं का कोई प्रकार -1 या टाइप -2 नहीं है। जावा प्रकार प्रणाली का उपयोग करके कार्यक्रम की शुद्धता साबित करने के माध्यम से नहीं बल्कि भाषा (कोई सूचक अंकगणितीय) और रनटाइम सिस्टम (वर्चुअल मशीन, बायोटेक सत्यापन) की सावधानीपूर्वक डिजाइन द्वारा बग से रिश्तेदार सुरक्षा सुनिश्चित करता है। जावा में टाइप सिस्टम न तो एक तार्किक प्रणाली है और न ही एक सेट सिद्धांत है।

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

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

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

स्साला का प्रकार प्रणाली रसेल के काम और अगाडा की सही प्रमाण भाषा से और भी अधिक है, लेकिन रसेल के काम में अभी भी जड़ें हैं।

औद्योगिक भाषाओं के गुणों को सिद्ध करने के लिए, जिनके प्रकार प्रणाली के लिए डिज़ाइन नहीं किए गए थे, कई दृष्टिकोण और प्रणालियाँ हैं।

दिलचस्प लेकिन अलग-अलग तरीकों के लिए, Coq और Microsoft बूगी अनुसंधान परियोजना देखें। Coq, Coq कार्यक्रमों से अनिवार्य कार्यक्रम उत्पन्न करने के लिए प्रकार सिद्धांत पर निर्भर करता है। बूगी संपत्तियों के साथ अनिवार्य कार्यक्रमों के एनोटेशन पर निर्भर करता है और उन गुणों को ज़ेड 3 प्रमेय के साथ साबित करता है जो Coq की तुलना में पूरी तरह से अलग दृष्टिकोण का उपयोग करते हैं।

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