विशेष इनपुट / मान्यताओं के लिए समस्या को हल करना मुश्किल है


19

इस प्रमाण की मेरी समझ से कि समस्या को हल करना संगणक नहीं है, यह समस्या संगणक योग्य नहीं है क्योंकि यदि हमारे पास एक प्रोग्राम P (x) है जो गणना करता है कि क्या प्रोग्राम x हल करता है या नहीं, P को एक इनपुट के रूप में देने पर हमें एक विरोधाभास मिला। वही P, होने: P (P), यह तय करने की कोशिश कर रहा है कि P खुद P का उपयोग कर रहा है या नहीं।

तो मेरा सवाल है: इनपुट पी के रूप में इस्तेमाल किए गए अन्य सभी कार्यक्रमों के लिए प्रोग्राम पी द्वारा कम्प्यूटिंग समस्या को हल किया जा रहा है? दूसरे शब्दों में: रुकने की समस्या केवल इस विशेष मामले में कम्प्यूटेशनल नहीं है या प्रमाण अधिक सामान्य है और मुझे कुछ याद आ रहा है?


मुझे लगता है कि आप इस प्रमाण को गलत समझ रहे हैं कि रुकने की समस्या कम्प्यूटेबल नहीं है। P (P) केवल सही रिटर्न देता है, क्योंकि P हमेशा यह निर्धारित करता है कि कोई कार्यक्रम सीमित समय में रुकता है या नहीं। विरोधाभास तक पहुंचने के लिए आपको कुछ थोड़ा पेचीदा निर्माण करने की आवश्यकता है।
दान स्टेली

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

जवाबों:


10

यदि कोई कम्प्यूटेशनल फ़ंक्शन है, तो जी , के रूप में परिभाषित किया गया हैfg

g(n)={f(n)if nkvotherwise

किसी भी विकल्प के लिए भी कम्प्यूटेशनल है ।k,v

मूल रूप से, यदि आपका कोई प्रोग्राम जो n = k को छोड़कर सभी n के लिए g ( n ) की गणना करता है , तो आप उस स्थिति को "ठीक" कर सकते हैं (उदाहरण के लिए) और दूसरे प्रोग्राम P को प्राप्त करें, जो g ( n ) के लिए गणना करता है सभी एनPg(n)nn=kif then elsePg(n)n

इसलिए, यदि आप हॉल्टिंग फ़ंक्शन "एक मामले को छोड़कर" की गणना कर सकते हैं, तो आप हॉल्टिंग फ़ंक्शन (बिना किसी अपवाद के) के साथ भी गणना कर सकते हैं। उस से, आप हमेशा की तरह एक विरोधाभास प्राप्त कर सकते हैं।

निष्कर्ष: नहीं, आप रुकने की समस्या "एक मामले को छोड़कर" (और न ही "कई मामलों को छोड़कर") तय कर सकते हैं।


1
ठीक है, मुझे लगता है कि मुझे यह गणितीय रूप से मिला ... लेकिन मैं सोच रहा था: अगर मैं एक कार्यक्रम लिखने की कोशिश करूंगा जो एचपी की गणना करता है तो मुझे क्या ठोस समस्याओं का सामना करना पड़ेगा? क्यों और कैसे कुछ बिंदु पर मैं समझ सकता हूँ कि मैं ऐसा कार्यक्रम नहीं लिख सकता हूँ?
एलेसियो मार्टोराना

@AlessioMartorana यह निर्भर करता है: आप इस तरह की समस्या से कैसे निपटेंगे? एक मुख्य मुद्दा यह है कि को हमेशा रोकना चाहिए, तब भी जब इसका इनपुट एक गैर-रोक कार्यक्रम है - इसलिए आप बस इनपुट प्रोग्राम को अनुकरण करने का प्रयास नहीं कर सकते। P
ची

और मानकर हम इनपुट प्रोग्राम का कोड देख सकते हैं? यदि प्रोग्राम रुकता है तो क्या हम कोड से नहीं देख सकते हैं?
एलेसियो मार्टोराना

2
@AlessioMartorana हम वास्तव में कोड देख सकते हैं, लेकिन यदि उदाहरण के लिए, लूप है, तो हम सामान्य रूप से बहुत कुछ नहीं कह सकते हैं। एक लूप एक अनियंत्रित गणितीय अनुमान के सभी संभावित प्रमाणों की जांच कर सकता है, और केवल एक प्रमाण मिलने पर ही रुक सकता है। यह तय करना कि क्या यह लूप हाल्ट का मतलब है यह तय करना कि अनुमान सिद्ध हो सकता है। एचपी को हल करने से हमें एक मशीन मिलेगी जो किसी भी औपचारिक गणितीय प्रश्न के लिए हां (साबित) / नहीं (साबित नहीं) का जवाब देगी। यह अनुचित रूप से शक्तिशाली होगा।
ची

1
@AlessioMartorana अगर आपको लगता है कि आपने एक प्रोग्राम लिखा था, जो HP को हल करता है, जहां आपका प्रोग्राम विफल हो जाएगा, तो दो में से एक तरीके से: कुछ प्रोग्राम्स के लिए यह गलत परिणाम दे सकता है (ऐसा होने पर या कुछ नहीं कहने पर कुछ रुक जाता है) टी रुका हुआ है जब यह करता है) और / या आपका डिक्रिडर प्रोग्राम खुद ही आपके साथ कई इनपुटों पर रोक नहीं लगा पाएगा, यह जानने में असमर्थ है कि क्या यह वास्तव में रुका नहीं होगा या यदि उत्तर की गणना के लिए इसे और अधिक समय चाहिए।
शफलेपेंट

21

क्या प्रोग्राम P द्वारा इनपुट के रूप में उपयोग किए जाने वाले अन्य सभी प्रोग्रामों के लिए समस्या निवारण योग्य है लेकिन P स्वयं?

सं कार्यक्रमों की अनंत अनुक्रम पर विचार करें , जहां पी मैं है "सिर ले जाएँ मैं  सही करने के लिए चौराहों, तो मैं  बाईं ओर चौराहों, तो वास्तव में क्या करना पीP1,P2,PiiiP करना होगा।" इनमें से हर एक प्रोग्राम हर इनपुट के लिए के समान ही आउटपुट उत्पन्न करता है  (यदि पी से हमेशा के लिए लूपिंग सहित  ), लेकिन वे सभी अलग-अलग प्रोग्राम हैं।PP

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


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

3
@ जब भी प्रतिबंध अपने आप में अनुचित है, तो आप प्रतिबंध लागू नहीं कर सकते हैं तो यह आपको वास्तविकता में कुछ भी नहीं खरीद सकता है।
डेविड रिचरबी

5

यह दिखाने के लिए एल्गोरिदम हैं कि कार्यक्रमों की कुछ कक्षाएं रुकती हैं या नहीं। उदाहरण के लिए,

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

हालांकि यह निर्धारित करने के लिए कोई एल्गोरिथ्म नहीं है कि यदि कोई मनमाना कार्यक्रम रुकता है, तो कोड का अधिकांश हिस्सा या तो रोक दिया गया (जैसे अधिकांश सबरूटीन्स) या रुक नहीं (घटनाओं को संभालने के लिए एक अनंत लूप की तरह), और यह निर्धारित करने के लिए एल्गोरिथम संभव है। दूसरे शब्दों में, आपके पास एक एल्गोरिथ्म हो सकता है जो या तो "हाल्ट", "हॉल्ट नहीं करता है" या "आई डनो" का उत्तर देता है, और इस तरह के एल्गोरिथ्म को पर्याप्त कार्यक्रमों को कवर करने के लिए डिज़ाइन किया जा सकता है कि यह उपयोगी होगा।


गोटो से इसका क्या लेना-देना है? क्या हमारे पास एक प्रोग्राम नहीं है जो गोटो का उपयोग करता है और फिर भी यह तय करता है कि क्या यह तब तक रुकता है, जब तक यह एक परिमित राज्य मशीन का मॉडल नहीं बनाता है?
बेर्गी

मैं लूप्स के संदर्भ में रुकने के बारे में लिखने जा रहा था, और फिर इसे केवल परिमित राज्य मशीनों और व्हाट्सएप के बारे में बात करने के लिए बदल दिया
एंटोनियो पेरेज़

4

विरोधाभास के सबूतों को संपूर्ण नहीं होना है , एक एकल काउंटर-उदाहरण पर्याप्त है। रुकने की समस्या का प्रमाण अयोग्य है, आपको P का एक उदाहरण प्रदान करता है जिसके लिए रुकने की संपत्ति तय नहीं की जा सकती। यह प्रमाण नहीं बताता है कि P एकमात्र ऐसा कार्यक्रम है, वास्तव में, P के पूरी तरह से अलग-अलग वर्गों का निर्माण करने वाले स्वतंत्र प्रमाण मौजूद हो सकते हैं।


3

प्रमाण वास्तव में अधिक सामान्य है: हॉल्टिंग समस्या राइस प्रमेय का एक विशेष मामला है , जो बताता है

यदि कार्यक्रमों की एक संपत्ति प्रतिनिधित्व के स्वतंत्र है कि है, तो यह या तो हमेशा की तरह, सच हमेशा गलत है, या अनिर्णनीय है।Φ

जहां "प्रतिनिधित्व के स्वतंत्र" का अर्थ यह है कि यदि और बी प्रोग्राम सभी आदानों के लिए एक ही व्यवहार है कि कर रहे हैं, तो Φ ( एक ) रखती है iff Φ ( बी ) आयोजित करता है।बीΦ()Φ(बी)

इसका मतलब विशेष रूप से है कि प्रत्येक इनपुट , प्रोग्राम का सेट जो x पर रुका हुआ है, वह अनिर्दिष्ट है; आप इनपुट स्थान को कम करके विश्वसनीयता प्राप्त नहीं कर सकते।एक्सएक्स

आप जिन कार्यक्रमों के साथ काम करना चाहते हैं उनके स्थान को सीमित करके आप कुछ परिणाम प्राप्त कर सकते हैं, हालांकि इन प्रतिबंधों को काफी कठोर होना चाहिए। उदाहरण के लिए, यदि आपको गारंटी दी जाती है कि आपको दिया गया प्रोग्राम 100 कदम के भीतर या तो हमेशा के लिए रुक जाता है या यह तय करता है कि क्या यह आसान हो जाता है।

एक अधिक जटिल मामला तब है जब आप जानते हैं कि कार्यक्रम अधिकतम 100 वर्णों पर है। चूँकि उस लंबाई के केवल बहुत ही कम कार्यक्रम होते हैं, इसलिए की कुछ संख्याएँ मौजूद होती हैं जो एक ऊपरी सीमा होती है कि अगर यह समाप्त हो जाए तो ऐसा कार्यक्रम कितने समय तक चल सकता है। हालांकि, समारोह है कि एक कार्यक्रम लंबाई नक्शे कश्मीर कदम की एक अधिकतम संख्या को बी बी ( कश्मीर ) गणनीय नहीं है।एनबीबी()


1
एन

1
अंतिम पैराग्राफ व्यस्त बीवर जैसा दिखता है।
ईविल

"काफी कठोर" प्रतिबंधों के संबंध में: कुल प्रोग्रामिंग भाषाएं एक चीज हैं। उन्हें अपेक्षाकृत उच्च स्तर के परिष्कार की आवश्यकता होती है, इसलिए हो सकता है कि आप उस कठोर पर विचार करें, लेकिन कार्यक्रमों की एक जगह में वास्तविक समस्याओं को हल करना संभव है जो कि काफी हद तक रुक जाते हैं।
बेन मिलवुड

En.wikipedia.org/wiki/Rice%27s_theorem के लिंक को शामिल करने से समझ में आता है IMO।
दिमित्री ग्रिगोरीव

धन्यवाद, मैंने उत्तर अपडेट कर दिया है। @BenMillwood निश्चित रूप से, लेकिन उनका समाधान दिया गया है "सब कुछ बंद करो" मुझे यकीन नहीं है कि यह वास्तव में है क्या Alessio की तलाश है। एक ऐसा मामला जहां हलाला का व्यवहार निंदनीय है, लेकिन गैर-तुच्छ होना दिलचस्प होगा, हालांकि: शायद अगड़ा + सहवर्ती प्रकार?
एंटन गोलोव

0

आज्ञा देना किसी भी पुनरावर्ती रूप से अप्रतिस्पर्धी लेकिन अप्रतिरोध्य सेट होना चाहिए। असीम रूप से ऐसे कई सेट हैं। बता दें कि T एक ऐसी ट्यूरिंग मशीन है जो इनपुट k पर रुकती है अगर और केवल यदि K R में हो तो ऐसा T किसी भी रिकर्सिवली एन्यूमरेबल सेट के लिए मौजूद होता है। एक प्रोग्राम लिखना असंभव है जो इस टी के लिए हल करने की समस्या को हल कर सकता है। यह इसलिए है क्योंकि यह निर्धारित करने के लिए कोई भी एल्गोरिथ्म है कि क्या टी हेल्ट आर में सदस्यता का निर्धारण करने के लिए एक एल्गोरिथ्म का उत्पादन करेगा, जो कि आर नॉनसेक्रसिव होने पर असंभव है। चूंकि असीम रूप से कई ऐसे आर हैं, जिनमें से प्रत्येक अलग-अलग ट्यूरिंग मशीन देते हैं, असीम रूप से कई ट्यूरिंग मशीन हैं जिन्हें पी द्वारा विफल किए गए किसी भी कार्यक्रम को रोकने का प्रयास किया जाएगा।

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