यदि आप कार्यक्रम सत्यापन से परिचित हैं, तो आप पृष्ठभूमि से पहले प्रश्न को पढ़ना पसंद करेंगे । यदि आप कार्यक्रम सत्यापन से परिचित नहीं हैं तो आप अभी भी इस प्रश्न का उत्तर देने में सक्षम हो सकते हैं, लेकिन आप पहले पृष्ठभूमि को पढ़ना पसंद करेंगे ।
पृष्ठभूमि
यह अक्सर कहा जाता है कि आंशिक शुद्धता की जाँच करना अनिर्दिष्ट है। चर्चा के लिए, आइए इस कथन को सटीक बनाने का एक विशेष तरीका चुनें, फ्लॉयड - होरे की शैली में। एक फ्लोग्राफ एक विशिष्ट प्रारंभिक नोड के साथ एक डिग्राफ है जिसमें से सभी नोड्स उपलब्ध हैं। एक प्रोग्राम एक फ्लोग्राफ है जिसका नोड्स कमांड हैं। आदेशों के तीन प्रकार हैं (1) धारणाएं q मानती हैं , (2) अभिकल्पना मुखर q , और (3) असाइनमेंट v: = e। यहाँ q एक फोल (प्रथम-क्रम तर्क) सूत्र है, e एक फोल शब्द है, और v एक चर है।
हम कहते हैं कि एक प्रोग्राम आंशिक रूप से सही होता है जब प्रत्येक नोड x को किसी पूर्व शर्त के साथ एनोटेट करने का एक तरीका होता है (x) और पोस्टकॉन्डीशन b (x) जैसे कि (१) प्रारंभिक नोड का पूर्वानुभव मान्य होता है, (२) { एक (एक्स) } x { ख (x) } के लिए सभी आदेशों रखती एक्स , और (3) ( ख (x) का अर्थ है एक (y) ) से सभी किनारों के लिए मान्य है एक्स के लिए वाई । यहाँ Hoare triples को इस प्रकार परिभाषित किया गया है:
- { p } assert q { r } का अर्थ है कि ( p का अर्थ है ( q और r )) मान्य है
- { p } मान q { r } का अर्थ है कि (( p और q का तात्पर्य r है ) मान्य है
- { पी } v: = ई { r } का मतलब है कि (( पी के साथ ई के लिए प्रतिस्थापित v ) का तात्पर्य आर ) मान्य है
यहाँ इस आंशिक शुद्धता को जाँचने का एक तर्कपूर्ण तर्क अचूक है: एक बार जब आप कुछ (x) और कुछ b (x) को भरते हैं, तो आपको यह जाँचने की आवश्यकता होती है कि क्या कुछ फ़ोल सूत्र मान्य हैं, और यह अयोग्य है।
आंशिक शुद्धता में समाप्ति को एन्कोड करने का एक विशिष्ट तरीका कुछ विशेष अभिक्रियाओं को जोड़ना है जो अनिवार्य रूप से कहते हैं "पिछली बार जब मुझे निष्पादित किया गया था, तब समाप्ति की दिशा में प्रगति हुई थी।" इन प्रगति अभिकथनों को इस तरह रखा जाना चाहिए कि फ्लोग्राफ पर सभी अनंत पैदल (जो प्रारंभिक नोड पर शुरू होते हैं) में असीम रूप से कई प्रगति अभिकथन होते हैं। अधिक विशिष्ट होना करने के लिए, चलो का कहना है कि प्रगति के दावे हमेशा फार्म का ज़ोर यू < वी , जहां यू और वी धनात्मक पूर्णांक होते हैं, काम से पहले कर रहे हैं यू : = च , और काम के बाद कर रहे हैं v : = यू । यहाँ च a हैप्रकार्य फ़ंक्शन , u इसका वर्तमान मान है, और v इसका पूर्व मान है। अब, चूंकि हम "सकारात्मक पूर्णांक" के बारे में बात करते हैं और हम उनकी तुलना करते हैं, हमें यह सुनिश्चित करने की आवश्यकता है कि फॉल से थोड़ा अधिक उपलब्ध है: मान लें कि पीनो अंकगणित उपलब्ध है। (मैं इस पसंद के बारे में दृढ़ता से महसूस नहीं करता हूं। यदि सुविधाजनक हो तो अवहेलना करने के लिए स्वतंत्र महसूस करें।) बेशक, एफ कार्यक्रम में उल्लिखित किसी भी अन्य कार्यों और स्थिरांक का उपयोग कर सकता है। (ध्यान दें कि कार्यक्रम की शुरुआत में धारणाओं को जोड़ना गैर-तार्किक स्वयंसिद्धों को पेश करने के बराबर है।)
अब, यदि प्रगति के दावे वाला कार्यक्रम अभी भी आंशिक रूप से सही है, तो हम जानते हैं कि मूल कार्यक्रम समाप्त हो गया है।
सवाल
एक समाप्ति कार्यक्रम को देखते हुए, यह महसूस करता है कि प्रगति के लिए विभिन्न प्रकार के कार्यों के साथ आना कठिन है। लेकिन कितना कठिन? (मुझे पता है कि ऊपर की विशाल पृष्ठभूमि के बावजूद, मैंने अभी भी इस तरह के खुले-समाप्त, या बीमार-परिभाषित को छोड़ दिया है, इस पर निर्भर करता है कि आप इसे कैसे देखना चाहते हैं।)
इसे अलग तरीके से रखने के लिए: मैं एक संदर्भ की तलाश कर रहा हूं जो आंशिक शुद्धता को समाप्त करने की समस्या को औपचारिकता देता है और फिर इसकी जटिलता के बारे में कुछ कहता है। एक उत्तर जो यह सब करता है वह निश्चित रूप से स्वागत योग्य होगा।