कुशल संगणना के लिए प्रोग्रामिंग भाषाएँ


32

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

उदाहरण के लिए, की तरह कुछ के लिए : अपने पसंदीदा प्रोग्रामिंग भाषा लेते हैं, और यदि आप अपने कार्यक्रम (ट्यूरिंग मशीन के लिए इसी लिखने के बाद एम ' ), शीर्षक के तीन मानों को जोड़ने: एक पूर्णांक , और पूर्णांक कश्मीर , और एक डिफ़ॉल्ट उत्पादन । जब कार्यक्रम संकलित किया गया है, उत्पादन एक ट्यूरिंग मशीन एम कि दिए गए इनपुट x आकार के एन चलाता एम ' पर एक्स के लिए n कश्मीर चरणों। अगर एम ' से पहले रोकने नहीं करता है n कश्मीरPMckdMxnMxcnkMcnkकदम ऊपर हैं, डिफ़ॉल्ट आउटपुट आउटपुट । जब तक मैं गलत नहीं हूं, यह प्रोग्रामिंग भाषाएं हमें पी में सभी गणनाओं को व्यक्त करने की अनुमति देंगी और इससे ज्यादा कुछ नहीं। हालाँकि, यह प्रस्तावित भाषा स्वाभाविक रूप से गैर-दिलचस्प है।dP

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


7
प्रोग्रामिंग भाषाओं के कुछ सरल उदाहरण जो कम्प्यूटेशनल कार्यों के सबसेट को पकड़ते हैं: नियमित अभिव्यक्ति और संदर्भ-मुक्त व्याकरण।
जुका सूमेला

2
वास्तव में वे भाषाएँ जो P V की तरह जटिलता वर्ग पकड़ती हैं (जो कि पुनरावर्ती के स्थान पर पुनरावर्ती के साथ आदिम पुनरावर्ती कार्यों के समान तरीके से परिभाषित की गई हैं) काफी दिलचस्प हैं (कम से कम सैद्धांतिक दृष्टिकोण से)। :)PPV
केव

रैखिक और पूर्णांक प्रोग्रामिंग कम्प्यूटेशनल कार्यों के दिलचस्प सबसेट को पकड़ते हैं।
डिएगो डे एस्ट्राडा

Datalog केवल बहुपद समय एल्गोरिदम व्यक्त कर सकते हैं, लेकिन मुझे नहीं पता कि यह सभी बहुपद समय एल्गोरिदम को व्यक्त कर सकता है या नहीं।
जूल्स

सुप्रसिद्ध पत्र "टोटल फंक्शनल प्रोग्रामिंग" यह तर्क देता है कि प्रोग्रामिंग लैंग्वेज जिनके पास असाध्य पड़ाव समस्या नहीं है, वास्तव में व्यावहारिक और उपयोगी है। jucs.org/jucs_10_7/total_functional_programming
कोई भी

जवाबों:


32

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

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

फिर भी अन्य दृष्टिकोण संसाधन बंधी हुई औपचारिक गणनाओं पर आधारित हैं , जैसे कि परिवेशीय गणना के प्रकार।

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

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

प्रोग्रामिंग भाषा चैरिटी एक काफी अभिव्यंजक कार्यात्मक भाषा है जो सभी इनपुटों पर आधारित है। मुझे नहीं पता कि यह किस जटिलता वर्ग की अभिव्यक्ति कर सकता है, लेकिन एकरमैन फ़ंक्शन को चैरिटी में लिखा जा सकता है।


यहां 'कम से कम' से आपका क्या मतलब है?
nponeccop

'कम से कम' यहाँ 'कुछ' का मतलब है। मैं इसे थोड़ा और सटीक बनाने के लिए अपना उत्तर बदलूँगा।
डेव क्लार्क

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

कोडी: वाडलर के "थ्योरीज़ फ़ॉर फ्री" के अनुसार, सिस्टम एफ "प्रत्येक पुनरावर्ती फ़ंक्शन को व्यक्त कर सकता है जो कि दूसरे क्रम के पीनो अंकगणितीय में कुल साबित हो सकता है", और इसमें "[...] एकरमैन का कार्य" शामिल है। मुझे यकीन नहीं है कि अगर आप ऐसा ही वर्णन कर रहे हैं। चैरिटी की मुख्य विशेषता कोडाटा के लिए इसका समर्थन है, जबकि मुझे लगता है कि Agda की समाप्ति की जाँच समाप्ति की गारंटी देते समय Coq और System F दोनों की तुलना में अधिक स्पष्टता की अनुमति देती है।
ब्लेज़ोरब्लेड

10

गिलियूम बोन्फेंटे पेपर पर एक नज़र डालें, जिन्होंने प्रोग्रामिंग भाषाओं का उपयोग करके लॉगस्पेस और बहुपद समय के लिए दो लक्षण वर्णन किए हैं।

Guillaume Bonfante, Logspace और PIME, AMAST 2006, LNCS 4019, पीपी .8-80, 2006 के लिए कुछ प्रोग्रामिंग भाषाएं।


8

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

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


5

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


1
यह सभी कार्यों का एक उचित उपवर्ग है, लेकिन इसे "कुशल" कार्यों का एक वर्ग कहना थोड़ा खिंचाव हो सकता है।
राफेल

मुझे लगता है कि आप इसे कैप्चर करने के लिए संशोधित कर सकते हैं पी कोहम के लक्षण वर्णन का उपयोग करते हुए पीबहुपद के रूप में बंधी हुई पुनरावृत्ति।
केवह

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

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