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