प्रमाण और कार्यक्रमों (या प्रस्ताव और प्रकारों के बीच) में क्या अंतर है?


26

यह देखते हुए कि करी-हावर्ड पत्राचार इतनी व्यापक रूप से फैला हुआ है / विस्तारित है, क्या सबूत और कार्यक्रमों (या प्रस्तावों और प्रकारों के बीच) में कोई अंतर है? क्या हम वास्तव में उन्हें पहचान सकते हैं?



यदि op पसंद करता है, तो @ मुझे एक टिप्पणी में और मैं इसे आपके लिए माइग्रेट कर सकता हूं।

2
जॉन क्रॉसले ने इस पर एक पत्र लिखा था कि मैं हाल ही में कहीं पोस्टेड देखने के लिए हुआ: [सबूत और कार्यक्रमों के बीच अंतर क्या है?] [ Citeseerx.ist.psu.edu/viewdoc/… - मैंने इसे अभी तक नहीं पढ़ा है, लेकिन यह सिफारिश की गई ...
टीजे एलिस

1
@ टीजे एलिस, इस लिंक के लिए धन्यवाद, लेकिन एक संक्षिप्त स्किम के बाद, ऐसा लगता है कि पेपर ने शीर्षक में प्रस्तुत प्रश्न का उत्तर नहीं दिया (या उत्तर "वे समान हैं")।
16

@ टीजे एलिस, क्या आपने इसे reddid / r / compsci पर पोस्ट किया है? मैंने इसे किया;) @ max, मुझे ऐसा लगा, इसीलिए मैंने यह प्रश्न पोस्ट किया है।

जवाबों:


20

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

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


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

1
वास्तव में। आइए, Coq के कार्यक्रम संश्लेषण / निष्कर्षण को न भूलें।
डेव क्लार्क

k T(e,k)¬k T(e,k)Tek

1
@Kaveh: इसे एक अलग प्रश्न के रूप में पूछें। एक टिप्पणी में आप कह सकते हैं "Godel-Gentzen अनुवाद एक निरंतरता-परिवर्तनकारी परिवर्तन है" लेकिन कुछ भी कम गूढ़ नहीं होगा। :)
नील कृष्णास्वामी


10

Coq में, 2 प्रकार (Prop और Set) हैं, उन्हें प्रोग्रामर द्वारा अलग-अलग करने के लिए उन प्रमाणों का उपयोग किया जाता है जो वास्तविक कोड का उत्पादन नहीं करेंगे और प्रमाण का वह भाग जो रनिंग कोड (आपके प्रोग्राम) को निकालने के लिए उपयोग किया जाएगा।

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

AFAIK दोनों को अलग करने के लिए कोई स्वचालित तरीका नहीं है। यह शोध के लिए कुछ दिलचस्प हो सकता है? या शायद कोई यह इंगित करने में सक्षम है कि यह स्पष्ट रूप से असंभव है?

निर्भर प्रकारों के साथ न केवल साक्ष्यों और कार्यक्रमों के बीच एक स्पष्ट अंतर नहीं है, बल्कि कार्यक्रमों और प्रकारों के बीच भी कोई अंतर नहीं है! एकमात्र अंतर वह होगा जहां प्रकार (या प्रोग्राम) दिखाई देता है, जिससे यह "प्रोग्राम" जगह या किसी दिए गए शब्द के "प्रकार" स्थान का हिस्सा बन जाता है।

एक उदाहरण यह स्पष्ट कर देगा मुझे आशा है कि:

जब आप पहचान फ़ंक्शन का उपयोग निर्भर प्रकारों के साथ करते हैं, तो आपको उस फ़ंक्शन को पास करने की आवश्यकता होती है जिस प्रकार आप फ़ंक्शन का उपयोग करने जा रहे हैं! आपके "प्रोग्राम" में मूल्य के रूप में टाइप का उपयोग किया जा रहा है!

अनकैप्ड लैम्ब्डा कैलकुलस:

λx.x

आश्रित प्रकार के साथ:

आईडी: (ए: सेट) -> ए -> ए

(λA.(λx.x))

यदि आप इस फ़ंक्शन का उपयोग कर रहे हैं, तो आप इसे इस उदाहरण की तरह करेंगे:

आईडी नैचुरल 1

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


6

मैं यहां एक अंग पर जाऊंगा और कहूंगा कि, अगर आप थोड़ा सा भी तैयार हैं, तो सबूत और समाप्ति कार्यक्रमों की पहचान की जा सकती है।

कोई भी समाप्ति कार्यक्रम एक प्रमाण है कि आप इसका इनपुट ले सकते हैं और इसका आउटपुट तैयार कर सकते हैं। यह निहितार्थ के प्रमाण का एक बहुत ही मूल प्रकार है।

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

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

x:xT

यह बहुत सरल है, लेकिन मुझे लगता है कि यह विचार की मजबूती का सुझाव देता है। (भले ही कुछ लोग इसे पसंद न करने के लिए बाध्य हों; ;-))


बहुत अच्छा जवाब।
टोटो

निश्चित रूप से, यह मानना ​​चाहिए कि आप परिमित साक्ष्य और समापन कार्यक्रमों का मतलब है। गैर-समाप्ति कार्यक्रमों के कुछ वर्ग अनंत प्रमाणों के रूप में ठीक काम करते हैं। यह गैर-उत्पादक गैर-समाप्ति कार्यक्रम है जिसे आपको देखने की आवश्यकता है।
रोमेनो

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

5

सबूत अप्रासंगिकता?

जब आप कुछ प्रोग्राम लिखते हैं, तो आप इसके प्रदर्शन, मेमोरी खपत आदि में रुचि रखते हैं।
उदाहरण के लिए बबल सॉर्ट के बजाय कुछ चतुर सॉर्टिंग एल्गोरिथ्म का उपयोग करना बेहतर है, भले ही उनके कार्यान्वयन समान प्रकार (यहां तक ​​कि आश्रित प्रकार की सेटिंग में) हों।

लेकिन जब आप कुछ प्रमेय साबित करते हैं तो यह केवल एक प्रमाण का अस्तित्व होता है जिसमें आप रुचि रखते हैं।

बेशक, सौंदर्य की दृष्टि से, कुछ प्रमाण अधिक सरल / सुंदर / प्रेरक / आदि हैं (जैसे पुस्तक से प्रमाण)।


4

यदि आप करी-हावर्ड पत्राचार को स्वीकार करते हैं तो प्रश्न मुख्य रूप से एक दार्शनिक है। "क्या सबूत और कार्यक्रम अलग हैं? बिल्कुल। कैसे? ठीक है, हम साक्ष्यों को 'प्रमाण' कहते हैं और हम कार्यक्रमों को 'कार्यक्रम' कहते हैं।"

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

ये गणितीय पूछताछ के विभिन्न क्षेत्रों को वर्गीकृत करने के लिए इस्तेमाल की जाने वाली प्राकृतिक भाषा के शब्द हैं। करी और हावर्ड ने क्या देखा कि ये दो अलग-अलग क्षेत्र हैं जहाँ वास्तव में एक ही चीज़ का अध्ययन किया जाता है। इस संबंध को नोट करना महत्वपूर्ण है क्योंकि यह कहता है कि इन विभिन्न शोधकर्ताओं को एक दूसरे से बात करनी चाहिए। लेकिन दूसरे स्तर पर, कनेक्शन को नोटिस करना उनके बीच के अंतर को मानना ​​है। किसी समस्या से निपटने के लिए, कभी-कभी इसे एक प्रोग्रामिंग समस्या के रूप में सोचना अधिक फायदेमंद होता है, जबकि अन्य समय में इसे तार्किक समस्या के रूप में सोचना अधिक लाभदायक होता है। परिप्रेक्ष्य में यह अंतर, मुझे लगता है, उनके बीच महत्वपूर्ण अंतर है। लेकिन क्या अंतर का एक अंतर पहचान का अंतर है एक गहरा दार्शनिक सवाल है जिसे कम से कम फ्रीज के रूप में वापस देखा गया हैउबेर सिन अनड बेडियुटुंग

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