कुल कार्यात्मक प्रोग्रामिंग की सीमाएं क्या हैं?


19

कुल कार्यात्मक प्रोग्रामिंग की सीमाएं क्या हैं? यह ट्यूरिंग-पूर्ण नहीं है, लेकिन फिर भी संभावित कार्यक्रमों के एक बड़े उपसमूह का समर्थन करता है। क्या ऐसे महत्वपूर्ण निर्माण हैं जो आप ट्यूरिंग-पूर्ण भाषा में लिख सकते हैं, लेकिन कुल कार्यात्मक भाषा में नहीं?

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

जवाबों:


16

यह कुल कार्यात्मक भाषा पर निर्भर करता है ।

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

(संभवतः, एक गैर-विघटनकारी समस्या में दिलचस्प कार्यक्रम हो सकते हैं, लेकिन ऐसे नहीं जो लोग उपयोग कर सकते हैं, क्योंकि वे जवाब जानने के लिए कभी भी लंबे समय तक इंतजार नहीं कर पाएंगे।)

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

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

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


आपके उत्तर के लिए धन्यवाद। इसलिए कुल मिलाकर कुछ हद तक मदद मिलती है, लेकिन यह एक बहुत ही कठिन समस्या बनी हुई है। मेरा मतलब है कि "सिद्धांत रूप में निर्धारित की जाने वाली हर चीज को सांख्यिकीय रूप से निर्धारित किया जा सकता है" क्या यह संभव था, इनपुट और आउटपुट के बीच के सभी रिश्तों का विश्लेषण करने के लिए, यदि आप पर्याप्त संसाधन होना चाहते हैं, तो यह बहुत मुश्किल या संभव नहीं है। । या मूलभूत कारण हैं कि यह सीमित क्यों है? जैसे राइस इरम प्रूफ करता है कि आंशिक कार्यों के लिए यह मामला है। या मैं चावल की प्रमेय गलत समझ रहा हूँ?
मैथिज स्टीन

मुझे लगता है कि यह इस बात पर निर्भर हो सकता है कि "रिश्ते" से आपका क्या मतलब है। विशेष रूप से, यदि आपका मतलब है "इनपुट ए आउटपुट बी में जाता है", तो यह कुल कार्यात्मक भाषा में तुच्छ रूप से निर्धारित होता है; बस कार्यक्रम चलाएं। लेकिन आप शायद उन विश्लेषणों में रुचि रखते हैं जो इनपुट के अनंत वर्ग के बारे में कुछ कहते हैं।
पॉल स्टैंसिफर

(उफ़; हिट गलती से दर्ज करें) ... लेकिन इससे एक और मूर्खतापूर्ण चाल खुल जाती है, क्योंकि मैं पहचान फ़ंक्शन के बारे में अनपेक्षित प्रश्न पूछ सकता हूं यदि मैं चाहता हूं: "कुछ के लिए X, (identity X)एक ट्यूरिंग मशीन है जो रुक जाती है?" यकीन है, कि के बारे में प्रतीत नहीं होता है identity, लेकिन आप "के बारे में" कैसे परिभाषित करते हैं?
पॉल स्टैंसिफर

हां, मैं जानना चाहता हूं कि क्या यह किसी इनपुट के सभी संभावित इनपुट मानों के लिए है, न कि व्यक्तिगत इनपुट्स के लिए। इसलिए अगर मैं आपको सही तरीके से समझता हूं, तो आपका मतलब यह है कि हमेशा कुछ अचूक प्रश्न होंगे, चाहे वह किसी भी प्रकार की प्रोग्रामिंग भाषा का उपयोग क्यों न करें? हालाँकि इस समस्या के कुछ अयोग्य प्रश्नों को पहले स्थान पर होने से रोकने से रोका जा सकता है, जैसे हाल्टिंग समस्या के लिए कुल कार्यात्मक भाषाएँ? क्योंकि पहचान समारोह के बारे में आपका सवाल कुल कार्यात्मक भाषा में निर्णायक नहीं होगा?
मैथिज स्टीन

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

16

कुल कार्यात्मक प्रोग्रामिंग की सीमाएं क्या हैं? यह ट्यूरिंग-पूर्ण नहीं है, लेकिन फिर भी संभावित कार्यक्रमों के एक बड़े उपसमूह का समर्थन करता है। क्या ऐसे महत्वपूर्ण निर्माण हैं जो आप ट्यूरिंग-पूर्ण भाषा में लिख सकते हैं, लेकिन कुल कार्यात्मक भाषा में नहीं?

LLL

  1. LLLLसंगत है। यह सिर्फ गोएडेल के प्रमेय का नियम है, यह मानते हुए कि आप अंकगणित कर सकते हैं। इसलिए हम जानते हैं कि हम कुल कार्यात्मक भाषाओं में स्व-व्याख्याकार नहीं लिख सकते हैं।

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

  3. फ्लिप पक्ष का दूसरा पहलू यह है कि गणित कठिन है! इसलिए कोई आसान अर्थ नहीं है जिसमें कुल भाषाएँ "पूरी तरह से विश्लेषण योग्य" हों - भले ही आपको पता हो कि कोई फ़ंक्शन समाप्त हो गया है, फिर भी आपको यह साबित करने के लिए बहुत सारे रचनात्मक कार्य करने पड़ सकते हैं कि यह एक संपत्ति है जिसे आप चाहते हैं। उदाहरण के लिए, यह जानना कि सूचियों से सूचियों तक एक समारोह कुल है, आपको यह साबित करने में बहुत दूर नहीं है कि यह एक छँटाई समारोह है ...।


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

मैं कहूंगा कि स्व-मूल्यांकन एक समस्या के रूप में नहीं गिना जाता है, क्योंकि यह भाषा के आधार पर भिन्न होता है। समस्या "भाषा X में एक कार्यक्रम का मूल्यांकन" एक ही समस्या है, चाहे आप इसे भाषा X या Y में हल करने का प्रयास करें। विशेष रूप से, यदि भाषा X कुल कार्यात्मक भाषा है, तो समस्या कुछ कुल कार्यात्मक भाषा में हल करने योग्य है , उसी मूर्खतापूर्ण चाल का उपयोग करके, जिसका मैंने पहले उपयोग किया था।
पॉल स्टैंसिफर

नील, ऐसा लगता है कि यह काफी आसान होना चाहिए कि यह साबित करने के लिए कि कुल भाषा अपने स्वयं के दुभाषिया का समर्थन नहीं कर सकती है। क्या मैं तुम्हें गलत समझ रहा हूँ? एक साधारण विकर्ण द्वारा, बिना किसी नियत बिंदु वाले किसी भी भाषा का कोई भी अपने स्वयं के व्याख्याकार का समर्थन नहीं कर सकता (चाहे वह अंकगणित का समर्थन करता हो या नहीं)। तर्क कोनोर मैकब्राइड द्वारा यहाँ विस्तृत किया गया है: mail.haskell.org/pipermail/haskell-cafe/2003-May/004343.html
टॉम एलिस

@TomEllis: मेरा तर्क अनिवार्य रूप से कॉनर का ही है। वास्तव में, उनकी पोस्ट पहले से ही इस अवलोकन (कॉनर की विशिष्ट बुद्धि के साथ) करती है जब वह इसे "एपिमेनाइड्स / कैंटर / रसेल / क्वीन / गोडेल / ट्यूरिंग तर्क" कहते हैं।
नील कृष्णस्वामी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.