यह सब रुकने की समस्या की अनिर्वायता से आता है। मान लें कि हमारे पास एक "संपूर्ण" मृत कोड फ़ंक्शन, कुछ ट्यूरिंग मशीन एम, और कुछ इनपुट स्ट्रिंग एक्स, और एक प्रक्रिया है जो इस तरह दिखता है:
Run M on input x;
print "Finished running input";
यदि एम हमेशा के लिए चलता है, तो हम प्रिंट स्टेटमेंट को हटा देते हैं, क्योंकि हम कभी भी उस तक नहीं पहुंचेंगे। यदि M हमेशा के लिए नहीं चलता है, तो हमें प्रिंट स्टेटमेंट रखने की आवश्यकता है। इस प्रकार, यदि हमारे पास एक मृत-कोड पदच्युत है, तो यह हमें हॉल्टिंग समस्या को हल करने की भी सुविधा देता है, इसलिए हमें पता है कि ऐसा कोई मृत-कोड पदच्युत नहीं हो सकता है।
जिस तरह से हम इसके आस-पास पहुंचते हैं वह "रूढ़िवादी सन्निकटन" है। इसलिए, ऊपर मेरे ट्यूरिंग मशीन उदाहरण में, हम मान सकते हैं कि रनिंग एम ऑन एक्स खत्म हो सकता है, इसलिए हम इसे सुरक्षित खेलते हैं और प्रिंट स्टेटमेंट को नहीं हटाते हैं। आपके उदाहरण में, हम जानते हैं कि कोई भी कार्य नहीं करता है या रुकना नहीं है, इसका कोई तरीका नहीं है कि हम उस प्रिंट स्टेटमेंट तक पहुंचेंगे।
आमतौर पर, यह "नियंत्रण-प्रवाह ग्राफ" का निर्माण करके किया जाता है। हम सरल धारणा बनाते हैं, जैसे कि "थोड़ी देर का अंत लूप शुरुआत और बयान के बाद जुड़ा हुआ है", भले ही वह हमेशा के लिए चलता हो या केवल एक बार चलता हो और दोनों पर नहीं जाता हो। इसी तरह, हम मानते हैं कि यदि कोई कथन अपनी सभी शाखाओं तक पहुँच सकता है, भले ही वास्तविकता में कुछ का उपयोग न किया जाए। इस प्रकार के सरलीकरण हमें "स्पष्ट रूप से मृत कोड" को हटाने की अनुमति देते हैं, जैसे कि आप जो उदाहरण देते हैं, वह शेष रहने योग्य है।
टिप्पणियों से कुछ भ्रम को स्पष्ट करने के लिए:
नाइटपिक: फिक्स्ड एम के लिए, यह हमेशा निर्णायक है। एम को इनपुट होना चाहिए
जैसा कि राफेल कहते हैं, मेरे उदाहरण में, हम ट्यूरिंग मशीन को एक इनपुट मानते हैं। यह विचार है कि, अगर हमारे पास एक पूर्ण DCE एल्गोरिथ्म होता, तो हम किसी भी ट्यूरिंग मशीन के लिए दिए गए कोड स्निपेट का निर्माण करने में सक्षम होते , और DCE होने से हॉल्टिंग समस्या का समाधान होता।
आश्वस्त नहीं। नो-ब्रांच में ब्लंट स्टेटमेंट के रूप में लौटना सीधे आगे के निष्पादन के लिए तय करना मुश्किल नहीं है। (और मेरे संकलक ने मुझे बताया कि यह पता लगाने में सक्षम है)
इस समस्या के लिए njzk2 उठता है: आप बिल्कुल सही हैं, इस मामले में आप यह निर्धारित कर सकते हैं कि वापसी के बाद एक बयान का कोई तरीका नहीं है। ऐसा इसलिए है क्योंकि यह काफी सरल है कि हम नियंत्रण-प्रवाह ग्राफ़ की कमी का उपयोग करके इसकी अप्रतिस्पर्धीता का वर्णन कर सकते हैं (अर्थात रिटर्न स्टेटमेंट में कोई आउटगोइंग एज नहीं हैं)। लेकिन कोई सही डेड कोड एलिमिनेटर नहीं है, जो सभी अप्रयुक्त कोड को समाप्त करता है।
मैं एक सबूत के लिए इनपुट-निर्भर प्रमाण नहीं लेता हूं। यदि इस तरह के उपयोगकर्ता इनपुट मौजूद हैं जो कोड को परिमित होने की अनुमति दे सकते हैं, तो यह संकलक के लिए सही है कि निम्नलिखित शाखा मृत नहीं है। मैं नहीं देख सकता कि ये सभी अपवोट किस लिए हैं, यह स्पष्ट (जैसे। अंतहीन स्टडिन) और गलत दोनों हैं।
TomášZato के लिए: यह वास्तव में एक इनपुट निर्भर प्रमाण नहीं है। बल्कि, इसे "फोर्ल" के रूप में व्याख्या करें। यह निम्नानुसार काम करता है: मान लें कि हमारे पास एक पूर्ण DCE एल्गोरिथ्म है। यदि आप मुझे एक मनमाना ट्यूरिंग मशीन M और इनपुट x देते हैं, तो मैं अपने DCE एल्गोरिथ्म का उपयोग यह निर्धारित करने के लिए कर सकता हूं कि क्या M हाल्ट, ऊपर कोड स्निपेट का निर्माण करके और यह देखते हुए कि क्या प्रिंट-स्टेटमेंट हटा दिया गया है। फ़ोर-स्टेटमेंट को साबित करने के लिए एक पैरामीटर को मनमाने ढंग से छोड़ने की यह तकनीक, गणित और तर्क में सामान्य है।
मैं पूरी तरह से TomášZato की बात को कोड के परिमित होने के बारे में नहीं समझता। निश्चित रूप से कोड परिमित है, लेकिन एक पूर्ण DCE एल्गोरिथ्म को सभी कोड पर लागू होना चाहिए, जो कि एक इन्फिनिटी सेट है। इसी तरह, जबकि कोड-ही फ़ाइन्ट है, इनपुट के संभावित सेट्स इनफिनिटी हैं, जैसा कि कोड का संभावित रनिंग-टाइम है।
अंतिम शाखा को मृत नहीं मानने के लिए: यह "रूढ़िवादी सन्निकटन" के संदर्भ में सुरक्षित है, मैं इसके बारे में बात करता हूं, लेकिन यह मृत कोड के सभी उदाहरणों का पता लगाने के लिए पर्याप्त नहीं है, जैसा कि ओपी पूछता है।
इस तरह कोड पर विचार करें:
while (true)
print "Hello"
print "goodbye"
स्पष्ट रूप से हम print "goodbye"
कार्यक्रम के व्यवहार को बदलने के बिना निकाल सकते हैं । इस प्रकार, यह मृत कोड है। लेकिन वहाँ है कि अगर बजाय एक अलग समारोह कॉल (true)
में while
हालत है, तो हम अगर हम इसे निकाल सकते हैं या नहीं कर सकते, undecidability के लिए अग्रणी पता नहीं है।
ध्यान दें कि मैं इसके साथ नहीं आ रहा हूं। यह संकलक के सिद्धांत में एक प्रसिद्ध परिणाम है। टाइगर बुक में इसकी चर्चा है । (आप यह देखने में सक्षम हो सकते हैं कि वे Google पुस्तकों में कहां बात करते हैं ।