क्या किसी ने वास्तव में एक सिस्टम बनाया है जो विनिर्देशन से कंप्यूटर प्रोग्राम लिखता है?


17

क्या किसी ने वास्तव में एक सिस्टम (सॉफ्टवेयर या सरल उदाहरणों के साथ कागज पर विस्तृत विवरण) लिखा है जो कंप्यूटर प्रोग्राम उत्पन्न करता है? मैं इनपुट करता हूं और यह एक प्रोग्राम बनाता है जो कि अभाज्य संख्याओं की संख्या 10. से कम है। को केवल रूप में परिभाषित किया गया है Prime(x)x<10Prime(x)

1<xAs.t.1<AA<xx=A×B, with A,BN
प्रोफेसरों का कहना है कि वे कर सकते हैं, लेकिन कोई भी वास्तविक पूर्ण उदाहरण नहीं देता।

13
आप की तरह मतलब है, आप जानते हैं, एक सामान्य प्रयोजन प्रोग्रामिंग भाषा के लिए एक संकलक?
साशो निकोलेव

1
नमस्ते - cstheory में आपका स्वागत है! दुर्भाग्य से आपका प्रश्न सैद्धांतिक कंप्यूटर विज्ञान में अनुसंधान स्तर का प्रश्न नहीं है और इस साइट पर ऑफ-टॉपिक है।

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

2
यहां आपके प्रश्न के अनुरूप एक पुस्तक है । और भी हैं। इसे समझना सरल नहीं है । Coq और इसाबेल (इस तरह की एक अन्य प्रणाली) भीड़ में SE उपयोगकर्ता शामिल हैं जो आपको प्रश्न बंद नहीं होने पर अधिक जानकारी और उदाहरण दे सकते हैं। मैंने इसे वेब के लिए खोज कर पाया: coq उदाहरण कार्यक्रम संश्लेषण।
बबौ

2
कंप्यूटर विज्ञान का वह क्षेत्र जो मैं आपके बारे में पूछ रहा हूं, को प्रोग्राम संश्लेषण कहा जाता है और यह शोध का एक सक्रिय क्षेत्र है।
हुक बेनेट

जवाबों:


11

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

यह दृढ़ता से तर्क में एक परिणाम से संबंधित है, जिसे करी-हावर्ड संवाददाता (या आइसोमोर्फिज्म) कहा जाता है , यह दर्शाता है कि कंप्यूटर प्रोग्राम और गणितीय प्रमाण बहुत समान हैं।

तो विचार यह है कि सिस्टम आपके प्रोग्राम विनिर्देश को सिद्ध करने के लिए एक प्रमेय के रूप में ले जाएगा। आपके उदाहरण के मामले में, यह कुछ ऐसा होगा (अनौपचारिक रूप से): "10 से छोटे सभी अभाज्य संख्याओं का एक सेट है"।

फिर, आप यह साबित करने का प्रयास करेंगे कि प्रमेय, और मौजूदा सिस्टम आपको सबूत बनाने में मदद करेंगे, कुछ हिस्सों को स्वचालित करेंगे, संभवतः पूरे प्रमाण को, और यह सुनिश्चित करेंगे कि आप कभी भी गलतियाँ नहीं करेंगे।

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

इन विचारों को स्पष्ट करने के लिए अतीत में कई प्रणालियां विकसित की गई थीं। बेहतर ज्ञात में से एक एलसीएफ रॉबिन मिलनर द्वारा था , जिसने उस उद्देश्य के लिए भाषा एमएल बनाया था । वर्तमान में सबसे उन्नत प्रणालियों में से एक Coq है

पूरी तरह से काम कर रहे उदाहरण हैं, उनमें से कुछ काफी जटिल हैं। आपको निम्नलिखित लेख में कुछ मिल सकता है , हालांकि यह किसी भी तरह से सरल पढ़ने के लिए नहीं है और तर्क के उन्नत ज्ञान की आवश्यकता है।


9

वैग उत्तर: हां, लेकिन लेखन के समय, अधिकांश अनौपचारिक कार्यक्रमों के लिए विनिर्देशों को लिखना उतना ही कठिन लगता है जितना कि प्रोग्राम लिखना और डिबग करना।

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

ये सभी निर्माणों की गणना पर आधारित हैं। यदि आप सैद्धांतिक आधार जानना चाहते हैं, तो मार्टिन-लोफ प्रकार सिद्धांत देखें। आसपास कुछ बेहतरीन परिचय हैं।


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

4

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


1

लॉजिक प्रोग्रामिंग और, आमतौर पर, डिक्लेरेटिव प्रोग्रामिंग एक आधार के रूप में लेते हैं जो आप प्रस्तावित करते हैं: अर्थात्, एक तार्किक विनिर्देश से, उस विनिर्देश को पूरा करने वाले परिणाम को लौटाएं।

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

आप इस तरह के सिस्टम के एक विशिष्ट (ओपन सोर्स) कार्यान्वयन के लिए ECLiPSe की कोशिश करना चाह सकते हैं ।


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