यह देखते हुए कि करी-हावर्ड पत्राचार इतनी व्यापक रूप से फैला हुआ है / विस्तारित है, क्या सबूत और कार्यक्रमों (या प्रस्तावों और प्रकारों के बीच) में कोई अंतर है? क्या हम वास्तव में उन्हें पहचान सकते हैं?
यह देखते हुए कि करी-हावर्ड पत्राचार इतनी व्यापक रूप से फैला हुआ है / विस्तारित है, क्या सबूत और कार्यक्रमों (या प्रस्तावों और प्रकारों के बीच) में कोई अंतर है? क्या हम वास्तव में उन्हें पहचान सकते हैं?
जवाबों:
प्रोग्रामिंग भाषा लोग दिन-प्रतिदिन उपयोग करते हैं इसलिए करी-हावर्ड पत्राचार में इतनी अच्छी तरह से फिट नहीं होते हैं, क्योंकि उनके प्रकार के सिस्टम बहुत कमजोर हैं। अनिवार्य कार्यक्रमों के लिए करी-हावर्ड का उपयोग करके कुछ दिलचस्प कहने के लिए, एक अधिक परिष्कृत प्रकार की प्रणाली की आवश्यकता होती है। एडाप्टिंग प्रूफ़्स- ए -प्रोग्राम्स की पुस्तक इस कोण को धक्का देती है जिसका उद्देश्य अनिवार्य कार्यक्रमों को संश्लेषित करना है। निर्भर प्रकार अधिक से अधिक लोकप्रिय होते जा रहे हैं, निश्चित रूप से अनुसंधान कार्यात्मक भाषाओं ( एजडा , एपिग्राम ) में, अंतर धुंधला हो रहा है। बेशक आप Coq प्रमेय (और संभवतः अन्य) के भीतर कार्यक्रम संश्लेषण / निष्कर्षण कर सकते हैं , जो निश्चित रूप से करी-हावर्ड पर आधारित है।
करी-हावर्ड पत्राचार का उपयोग उन स्थितियों में भी किया जा सकता है जहां साक्ष्य स्पष्ट रूप से कार्यक्रमों के अनुरूप नहीं होते हैं (या वे ऐसे कार्यक्रम नहीं हैं जो कभी भी चलेंगे)। इसका एक उदाहरण सबूत ढोने वाले प्राधिकरण में है । प्रस्ताव बयानों के अनुरूप है कि कौन क्या करने के लिए अधिकृत है। सबूत आवश्यक सबूत प्रदान करते हैं जो एक प्रस्ताव रखता है, इस प्रकार एक प्राधिकरण अनुरोध की अनुमति है। प्रमाणों को अंकित करने के लिए, प्रमाण शब्द (करी-हावर्ड के माध्यम से) प्रस्तुत किए जाते हैं। प्रमाण के रूप में दलों को प्राधिकरण अनुरोधों की वैधता के सबूतों के प्रतिनिधित्व के रूप में भेजा जाता है, लेकिन उन्हें कार्यक्रम नहीं माना जाता है।
Coq में, 2 प्रकार (Prop और Set) हैं, उन्हें प्रोग्रामर द्वारा अलग-अलग करने के लिए उन प्रमाणों का उपयोग किया जाता है जो वास्तविक कोड का उत्पादन नहीं करेंगे और प्रमाण का वह भाग जो रनिंग कोड (आपके प्रोग्राम) को निकालने के लिए उपयोग किया जाएगा।
उस समस्या का एक अच्छा समाधान है जिसके बारे में आप पूछते हैं, कैसे पहचानें कि मशीन कोड (प्रोग्राम) उत्पन्न करने के लिए क्या है और प्रस्ताव (या प्रकार) के प्रमाण को पूरा करने के लिए क्या मौजूद है।
AFAIK दोनों को अलग करने के लिए कोई स्वचालित तरीका नहीं है। यह शोध के लिए कुछ दिलचस्प हो सकता है? या शायद कोई यह इंगित करने में सक्षम है कि यह स्पष्ट रूप से असंभव है?
निर्भर प्रकारों के साथ न केवल साक्ष्यों और कार्यक्रमों के बीच एक स्पष्ट अंतर नहीं है, बल्कि कार्यक्रमों और प्रकारों के बीच भी कोई अंतर नहीं है! एकमात्र अंतर वह होगा जहां प्रकार (या प्रोग्राम) दिखाई देता है, जिससे यह "प्रोग्राम" जगह या किसी दिए गए शब्द के "प्रकार" स्थान का हिस्सा बन जाता है।
एक उदाहरण यह स्पष्ट कर देगा मुझे आशा है कि:
जब आप पहचान फ़ंक्शन का उपयोग निर्भर प्रकारों के साथ करते हैं, तो आपको उस फ़ंक्शन को पास करने की आवश्यकता होती है जिस प्रकार आप फ़ंक्शन का उपयोग करने जा रहे हैं! आपके "प्रोग्राम" में मूल्य के रूप में टाइप का उपयोग किया जा रहा है!
अनकैप्ड लैम्ब्डा कैलकुलस:
आश्रित प्रकार के साथ:
आईडी: (ए: सेट) -> ए -> ए
यदि आप इस फ़ंक्शन का उपयोग कर रहे हैं, तो आप इसे इस उदाहरण की तरह करेंगे:
आईडी नैचुरल 1
ध्यान दें कि "प्रकार" (इस मामले में सेट ऑफ नेचुरल्स) को मान के रूप में पारित किया जा रहा है, इसलिए इसे कभी भी गणना नहीं किया जाएगा, लेकिन फिर भी यह "प्रोग्राम" शब्द के हिस्से में है। "प्रूफ" भागों के साथ भी यही होगा, उन्हें टाइप-चेक की अवधि के लिए वहाँ रहने की जरूरत है, लेकिन गणना के दौरान उन्हें फेंक दिया जाएगा।
मैं यहां एक अंग पर जाऊंगा और कहूंगा कि, अगर आप थोड़ा सा भी तैयार हैं, तो सबूत और समाप्ति कार्यक्रमों की पहचान की जा सकती है।
कोई भी समाप्ति कार्यक्रम एक प्रमाण है कि आप इसका इनपुट ले सकते हैं और इसका आउटपुट तैयार कर सकते हैं। यह निहितार्थ के प्रमाण का एक बहुत ही मूल प्रकार है।
बेशक, इस निहितार्थ को स्पष्ट करने की तुलना में जानकारी को अधिक सार्थक बनाने के लिए, आपको यह दिखाने में सक्षम होना चाहिए कि प्रोग्राम किसी भी और सभी प्रकार के इनपुट के लिए काम करता है तार्किक अर्थ के साथ कुछ वर्ग बनाते हैं। (और इसलिए आउटपुट के लिए भी।)
दूसरी दिशा से, परिमित इंजेक्शन चरणों के साथ कोई भी प्रमाण किसी तार्किक प्रणाली में वस्तुओं में हेरफेर करने का एक प्रतीकात्मक कार्यक्रम है। (यदि हम इस बारे में बहुत अधिक चिंता नहीं करते हैं कि तार्किक प्रतीकों और नियमों का कम्प्यूटेशनल रूप से क्या मतलब है।)
यह बहुत सरल है, लेकिन मुझे लगता है कि यह विचार की मजबूती का सुझाव देता है। (भले ही कुछ लोग इसे पसंद न करने के लिए बाध्य हों; ;-))
सबूत अप्रासंगिकता?
जब आप कुछ प्रोग्राम लिखते हैं, तो आप इसके प्रदर्शन, मेमोरी खपत आदि में रुचि रखते हैं।
उदाहरण के लिए बबल सॉर्ट के बजाय कुछ चतुर सॉर्टिंग एल्गोरिथ्म का उपयोग करना बेहतर है, भले ही उनके कार्यान्वयन समान प्रकार (यहां तक कि आश्रित प्रकार की सेटिंग में) हों।
लेकिन जब आप कुछ प्रमेय साबित करते हैं तो यह केवल एक प्रमाण का अस्तित्व होता है जिसमें आप रुचि रखते हैं।
बेशक, सौंदर्य की दृष्टि से, कुछ प्रमाण अधिक सरल / सुंदर / प्रेरक / आदि हैं (जैसे पुस्तक से प्रमाण)।
यदि आप करी-हावर्ड पत्राचार को स्वीकार करते हैं तो प्रश्न मुख्य रूप से एक दार्शनिक है। "क्या सबूत और कार्यक्रम अलग हैं? बिल्कुल। कैसे? ठीक है, हम साक्ष्यों को 'प्रमाण' कहते हैं और हम कार्यक्रमों को 'कार्यक्रम' कहते हैं।"
या इसे कम फ़्लिप करने के लिए, अगर सबूत और कार्यक्रमों के बीच एक समरूपता है -जिसमें स्पष्ट रूप से ऐसा लगता है - तो आपका सवाल यह पूछ रहा है कि क्या कोई अलंकार है जो दोनों को अलग करने में सक्षम है। मनुष्य उन्हें अलग-अलग (अधिकांश भाग के लिए) के रूप में वर्गीकृत करता है, इसलिए यह निश्चित रूप से यकीन है कि इस तरह का एक आभूषण मौजूद है। महत्वपूर्ण सवाल तब बनता है कि क्या उनके बीच कोई सार्थक अंतर है, जो दार्शनिक बहस के लिए है। "प्रमाण" क्या है? प्रमाण का गठन करने की कोई औपचारिक परिभाषा नहीं है; यह एक शब्द है, चर्च-ट्यूरिंग थीसिस में "प्रभावी रूप से गणना योग्य" की धारणा की तरह। उस मामले के लिए, "कार्यक्रम" की कोई औपचारिक परिभाषा नहीं है।
ये गणितीय पूछताछ के विभिन्न क्षेत्रों को वर्गीकृत करने के लिए इस्तेमाल की जाने वाली प्राकृतिक भाषा के शब्द हैं। करी और हावर्ड ने क्या देखा कि ये दो अलग-अलग क्षेत्र हैं जहाँ वास्तव में एक ही चीज़ का अध्ययन किया जाता है। इस संबंध को नोट करना महत्वपूर्ण है क्योंकि यह कहता है कि इन विभिन्न शोधकर्ताओं को एक दूसरे से बात करनी चाहिए। लेकिन दूसरे स्तर पर, कनेक्शन को नोटिस करना उनके बीच के अंतर को मानना है। किसी समस्या से निपटने के लिए, कभी-कभी इसे एक प्रोग्रामिंग समस्या के रूप में सोचना अधिक फायदेमंद होता है, जबकि अन्य समय में इसे तार्किक समस्या के रूप में सोचना अधिक लाभदायक होता है। परिप्रेक्ष्य में यह अंतर, मुझे लगता है, उनके बीच महत्वपूर्ण अंतर है। लेकिन क्या अंतर का एक अंतर पहचान का अंतर है एक गहरा दार्शनिक सवाल है जिसे कम से कम फ्रीज के रूप में वापस देखा गया हैउबेर सिन अनड बेडियुटुंग ।