65

जब आप व्यक्तिगत रूप से halting problem फ़ील्ड में व्यक्तिगत रूप से आते हैं? यह तब हो सकता है जब एक सहकर्मी/मालिक ने एक समाधान का सुझाव दिया जो गणना की मौलिक सीमाओं का उल्लंघन करेगा, या जब आप स्वयं को महसूस करेंगे कि एक समस्या जिसे आप हल करने की कोशिश कर रहे थे, वास्तव में, हल करना असंभव था।फ़ील्ड में halting prоblеm

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

+1

स्थिर प्रकार सिस्टम केवल इसके मूल्य के बजाय चर के प्रकार के लिए जांच नहीं करते हैं? मुझे लगता है कि आपके वर्ग ने संकलित समय पर रनटाइम त्रुटियों को अस्वीकार करने के लिए एक स्थिर प्रकार चेकर की अपेक्षा करते समय प्रश्न को खराब कर दिया। – andandandand

+1

@dmindreader - नहीं। अधिकांश कंपाइलर/प्रकार-सुरक्षित भाषाएं वास्तव में केवल प्रकारों की जांच करती हैं, लेकिन कुछ (कभी-कभी) स्थिर विश्लेषण के लिए मूल्यों की सीमा देखना संभव है। गौर करें कि रीशेर्पर या कवरिटी कैसे "संभावित शून्य मूल्य" चेतावनियां उत्पन्न करती है। –

+2

मैं चिकित्सा उपकरणों को डिजाइन करने के लिए प्रयोग किया जाता था। मुझे एक बार बैटरी संचालित डिवाइस में शामिल करने के लिए कहा गया था, एक प्रकाश जो इंगित करेगा कि बैटरी मर गई थी। –

उत्तर

57

I शाब्दिक को रोकथाम की समस्या सौंपी गई है, जैसा कि "एक मॉनिटर प्लगइन लिखना है कि यह निर्धारित करने के लिए कि कोई होस्ट स्थायी रूप से नीचे है या नहीं"। गंभीरता से? ठीक है, तो मैं इसे सिर्फ एक सीमा दे दूंगा। "नहीं, क्योंकि यह बाद में वापस आ सकता है।"

अधिक सैद्धांतिक प्रदर्शनी शुरू हुई।

+5

वाह - बस, वाह। उस व्यक्ति के दिमाग में मौजूद अजीब की गहराई सिर्फ मुझे परेशान कर रही है ... –

+1

वैसे, वास्तव में यह एक सुंदर उज्ज्वल व्यक्ति था जिसने समस्या को समझने के बाद बहुत भेड़िया महसूस किया। –

+0

बस प्लग खींचें :-) यह भी देखें http://en.wikipedia.org/wiki/STONITH –

13

परिष्कृत स्थिर कोड विश्लेषण रोक समस्या में भाग सकता है।

उदाहरण के लिए, यदि जावा वर्चुअल मशीन साबित कर सकती है कि कोड का एक टुकड़ा किसी भी सरणी अनुक्रमणिका को कभी भी एक्सेस नहीं करेगा, तो यह जांच कर सकता है और तेज़ी से चला सकता है। कुछ कोड के लिए यह संभव है; क्योंकि यह अधिक जटिल हो जाता है यह रोक समस्या बन जाता है।

34

The project I'm working on right now इसमें सब कुछ अनिश्चित समस्याएं हैं। यह एक यूनिट टेस्ट जनरेटर है, इसलिए आम तौर पर यह पूरा करने का प्रयास करता है कि "यह प्रोग्राम क्या करता है" का उत्तर देना है। जो एक रोकथाम की समस्या का एक उदाहरण है। विकास के दौरान आया एक और समस्या "दो (परीक्षण) कार्यों को एक ही" "दिया जाता है? या यहां तक ​​कि "क्या उन दो कॉलों (दावे) का आदेश" "है?

क्या इस परियोजना के बारे में दिलचस्प है कि, भले ही आप सभी स्थितियों में उन सवालों का जवाब नहीं कर सकते, तो आप चतुर समाधान है कि समस्या का समाधान समय के 90% है, जो इस डोमेन के लिए वास्तव में है पा सकते हैं बहुत अच्छा।

अन्य टूल्स जो अन्य कोड के बारे में तर्क करने का प्रयास करते हैं, जैसे कि कंपाइलर्स/दुभाषियों को अनुकूलित करना, स्थिर कोड विश्लेषण उपकरण, यहां तक ​​कि रीफैक्टरिंग टूल्स, हिटिंग समस्या को हिट करने की संभावना है (इस प्रकार काम करने के लिए मजबूर होना पड़ता है)।

5

पर्ल की परीक्षण प्रणाली एक परीक्षण काउंटर रखती है। आप या तो प्रोग्राम के शीर्ष पर चलने वाले परीक्षणों की संख्या डालते हैं, या आप घोषणा करते हैं कि आप इसे ट्रैक नहीं करेंगे। यह परीक्षण आपके परीक्षण के खिलाफ समय से बाहर निकलने के खिलाफ है, लेकिन अन्य गार्ड हैं इसलिए यह इतना महत्वपूर्ण नहीं है।

प्रत्येक बार एक बार कुछ लोग आपके लिए परीक्षणों की संख्या की गणना करने के लिए एक प्रोग्राम लिखने की कोशिश करता है। यह निश्चित रूप से, एक साधारण पाश द्वारा हराया जाता है। वे वैसे भी आगे बढ़ते हैं, लूपों को खोजने और पहचानने के लिए अधिक से अधिक विस्तृत चाल करते हैं और अनुमान लगाते हैं कि कितनी पुनरावृत्ति होगी और रोकथाम की समस्या का समाधान होगा। आम तौर पर वे घोषणा करते हैं कि इसे सिर्फ "पर्याप्त" होना है।

Here's a particularly elaborate example.

6

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

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


क्यों इस हॉल्टिंग समस्या के बराबर है:

कल्पना कीजिए अगर धागा एक्स एक ताला है आप दो ताले, ए और बी, और दो धागे, एक्स और वाई है, और भी बी ताला चाहता है , और थ्रेड वाई में लॉक बी है और ए भी चाहता है, तो आपके पास डेडलॉक है।

यदि एक्स और वाई दोनों के पास ए और बी दोनों तक पहुंच है, तो यह सुनिश्चित करने का एकमात्र तरीका है कि आप कभी भी खराब स्थिति में नहीं पहुंचते हैं, प्रत्येक थ्रेड कोड के माध्यम से ले जा सकते हैं, और सभी संभव पथ निर्धारित करना है। ऑर्डर जिसमें वे उन सभी मामलों में ताले हासिल कर सकते हैं और पकड़ सकते हैं। फिर आप यह निर्धारित करते हैं कि क्या दो थ्रेड कभी भी एक अलग क्रम में एक से अधिक लॉक प्राप्त कर सकते हैं।

लेकिन, प्रत्येक थ्रेड को कोड के माध्यम से ले जाने वाले सभी संभावित पथ निर्धारित करना (सामान्य मामले में) रोकने की समस्या के बराबर है।

+1

पर कुछ पहुंच योग्य कोड क्यों असंभव है? बेशक, प्रदर्शन अत्यधिक लॉकिंग के साथ घट सकता है लेकिन इससे कोई रोकथाम नहीं हो पाती है! या मुझसे यहां कुछ छूट रहा है? – Jaywalker

19

कई सारे चंद्रमा पहले मैं हमारी कंपनी के लिए सलाहकार की सहायता कर रहा था जो 1500 डिग्री विस्फोट भट्टी में और बाहर धातु के हिस्सों के टोकरी को स्थानांतरित करने के लिए एक बहुत ही जटिल रेल प्रणाली को लागू कर रहा था। ट्रैक खुद ही दुकान के तल पर एक काफी जटिल 'मिनी-रेलार्ड' था जो कुछ स्थानों पर खुद को छेड़छाड़ कर रहा था। कई मोटरसाइकिल वाले पैलेट एक शेड्यूल के अनुसार भागों के टोकरी को शटल करेंगे। यह बहुत महत्वपूर्ण था कि फर्नेस दरवाजे जितना संभव हो उतना कम समय के लिए खुले थे।

चूंकि संयंत्र पूर्ण उत्पादन में था, इसलिए सलाहकार अपने शेड्यूलिंग एल्गोरिदम का परीक्षण करने के लिए 'वास्तविक समय' में अपना सॉफ़्टवेयर चलाने में असमर्थ था। इसके बजाय, उन्होंने एक सुंदर, ग्राफिक-वाई सिम्युलेटर लिखा था। जैसा कि हमने वर्चुअल पैलेट को अपने ऑन-स्क्रीन ट्रैक लेआउट पर चारों ओर घूमते देखा, मैंने पूछा, "अगर आपको कोई शेड्यूलिंग टकराव है तो आप कैसे जानेंगे?"

उनका त्वरित उत्तर, "आसान - सिमुलेशन कभी नहीं रुक जाएगा।"

+6

मेटा पार्ट्स यही कारण है कि मेरे लिए विस्फोट भट्टी को तब तक लिया गया जब यह समझने के लिए कि उनकी रेल प्रणाली रूबी वेब एप्लिकेशन नहीं थी। – Karl

+1

मेटा! जब तक मुझे समझ में नहीं आया कि मुझे तुम्हारा क्या मतलब है, तब तक मुझे अपने पोस्ट सेवलल बार दोबारा पढ़ना पड़ा! मेटाएल, ज़ाहिर है! – n8wrl

11

यह अभी भी GPU अनुप्रयोगों में शेडरों के लिए एक समस्या है। यदि एक शेडर में अनंत लूप (या बहुत लंबी गणना) है, तो ड्राइवर को (कुछ समय सीमा के बाद) इसे रोकना चाहिए, टुकड़े को मारना चाहिए, या बस इसे चलाने दें? गेम और अन्य वाणिज्यिक सामानों के लिए, पूर्व शायद आप जो चाहते हैं, लेकिन वैज्ञानिक/जीपीयू कंप्यूटिंग के लिए, उत्तरार्द्ध वह है जो आप चाहते हैं। इससे भी बदतर, विंडोज़ के कुछ संस्करण मानते हैं कि चूंकि ग्राफिक्स ड्राइवर कुछ समय के लिए उत्तरदायी नहीं है, इसलिए यह इसे मारता है, जो GPU पर गणना करते समय कृत्रिम रूप से कंप्यूटिंग पावर को सीमित करता है।

किसी एप्लिकेशन के लिए कोई एपीआई नहीं है कि ड्राइवर को कैसे व्यवहार करना चाहिए या टाइमआउट या कुछ सेट करना चाहिए, और निश्चित रूप से ड्राइवर को यह बताने का कोई तरीका नहीं है कि आपका शेडर खत्म हो रहा है या नहीं।

मुझे नहीं पता कि हाल ही में इस स्थिति में सुधार हुआ है, लेकिन मैं जानना चाहता हूं।

1

मैं एक बार एटीएम (स्वचालित टेलर मशीन) डोमेन में एकीकरण परियोजना पर काम कर रहा था।ग्राहक ने मुझे अपने सिस्टम से देश के स्विच द्वारा भेजे गए लेनदेन के लिए एक रिपोर्ट तैयार करने का अनुरोध किया जो मेरे सिस्टम द्वारा प्राप्त नहीं किया गया !!

28

उदाहरण 1. मेरी रिपोर्ट में कितने पेज हैं?

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

रिपोर्ट परिभाषा इतनी लचीली हो गई कि यह ट्यूरिंग पूर्ण हो गया। यह चर को देख सकता है, विकल्पों के बीच चयन कर सकता है, चीजों को दोहराने के लिए लूप का उपयोग कर सकता है।

मैंने एक अंतर्निहित परिवर्तनीय एन परिभाषित किया है, रिपोर्ट उदाहरण में पृष्ठों की संख्या, ताकि आप प्रत्येक पृष्ठ पर "पृष्ठ एन एन" कहने वाली स्ट्रिंग डाल सकें। मैंने दो पास किए, पहले पृष्ठ से प्राप्त एन का उपयोग करके पृष्ठों को गिनने वाले पहले व्यक्ति (जिसके दौरान एन को शून्य पर सेट किया गया था), और दूसरा वास्तव में उन्हें उत्पन्न करने के लिए।

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

यह तब सवाल उठता है, "क्या मैं कम से कम उपयोगकर्ता को पहचान और चेतावनी दे सकता हूं अगर पुनरावृत्ति कभी भी उनकी रिपोर्ट के पृष्ठों की संख्या के लिए एक स्थिर मूल्य पर व्यवस्थित नहीं हो सकती है?" सौभाग्य से इस समय तक मैं ट्यूरिंग, गोडेल, कम्प्यूटेबिलिटी इत्यादि के बारे में पढ़ने में दिलचस्पी लेता था और कनेक्शन बना देता था।

सालों बाद मैंने देखा कि एमएस एक्सेस कभी-कभी "5 का पृष्ठ 6" प्रिंट करता है, जो वास्तव में एक अद्भुत बात है।

उदाहरण 2: सी ++ compilers

संकलन प्रक्रिया का विस्तार टेम्पलेट्स शामिल है। टेम्पलेट परिभाषाओं को कई विशेषज्ञताओं से चुना जा सकता है ("cond" के रूप में सेवा करने के लिए पर्याप्त अच्छा) और वे भी रिकर्सिव हो सकते हैं। तो यह एक ट्यूरिंग पूर्ण (शुद्ध कार्यात्मक) मेटा-सिस्टम है, जिसमें टेम्पलेट परिभाषाएं भाषा हैं, प्रकार मान हैं, और संकलक वास्तव में एक दुभाषिया है। यह एक दुर्घटना थी।

परिणामस्वरूप किसी भी दिए गए सी ++ प्रोग्राम की जांच करना संभव नहीं है और कहें कि संकलक सिद्धांत के कार्यक्रम के सफल संकलन के साथ सिद्धांत रूप से समाप्त हो सकता है या नहीं।

कंपाइलर विक्रेताओं टेम्पलेट रिकर्सिव की स्टैक गहराई को सीमित करके इस के आसपास मिलता है। आप g ++ में गहराई को समायोजित कर सकते हैं।

-4

"आप मुझे कैसे आश्वस्त कर सकते हैं कि आपका कोड 100% बग से मुक्त है?"

+4

मुझे संदेह है कि यह रोकथाम की समस्या के बराबर है। ट्रिविअल कोड गणितीय साबित बग-मुक्त हो सकता है। – endolith

41

साल पहले, मुझे बेसिक अनंत लूप फाइंडर या बीआईएलएफ नामक उत्पाद के एक समीक्षा (बाइट पत्रिका में, मेरा मानना ​​है) पढ़ना याद है। बीआईएलएफ को आपके माइक्रोसॉफ्ट बेसिक सोर्स कोड को स्कैन करना था और किसी भी लूप को समाप्त करना नहीं था जिसे समाप्त नहीं किया गया था। यह किसी भी कोड में किसी भी अनंत लूप खोजने में सक्षम होने का दावा किया।

समीक्षक यह समझने के लिए पर्याप्त समझदार था कि उस कार्यक्रम के लिए सभी मामलों में काम करने के लिए, इसे रोकने की समस्या को हल करना होगा और गणितीय प्रमाण प्रदान करना होगा कि यह सभी मामलों में क्यों काम नहीं कर सका ।

अगले अंक में, उन्होंने एक कंपनी प्रतिनिधि से एक पत्र प्रकाशित किया जिसमें यह समझाया गया कि समस्या अगले रिलीज में तय की जाएगी।

अद्यतन: मैं imgur पर आलेख की एक छवि में भाग गया। मुझे गलत पत्रिका याद आई। यह क्रिएटिव कंप्यूटिंग था, बाइट नहीं। अन्यथा, यह बहुत याद है क्योंकि मुझे याद आया।

आप imgur पर इसका एक हाय-रेज संस्करण देख सकते हैं।

enter image description here enter image description here

+18

यह उल्लसित है! क्या वहां कोई प्रति उपलब्ध है? – rodion

+1

Google पर एकमात्र परिणाम इस पोस्ट और इसके लिंक हैं। – SLaks

+3

यह 70 के उत्तरार्ध या 80 के दशक के उत्तरार्ध में होता। वेब वापस इतना लोकप्रिय नहीं था ;-) – Ferruccio

0

Functional Overview of (Eclipse) Visual Editor से:

ग्रहण दृश्य संपादक (VE) किसी भी जावा फाइल को खोलने के लिए इस्तेमाल किया जा सकता है। इसके बाद दृश्य स्रोतों के लिए देखकर जावा स्रोत कोड को पार करता है। ...

कुछ दृश्य संपादन उपकरण केवल कोड का एक दृश्य मॉडल है कि कि विशेष रूप से दृश्य उपकरण ही उत्पन्न किया है प्रदान करेगा। स्रोत कोड के बाद के प्रत्यक्ष संपादन कोड को पार्स करने और मॉडल बनाने से दृश्य उपकरण को रोक सकता है।

ग्रहण VE, हालांकि, ... या तो खरोंच से GUIs संपादित करने के लिए या जावा फ़ाइलों को किया गया है 'हार्डकोडेड' या एक अलग दृश्य उपकरण में बनाया से इस्तेमाल किया जा सकता। स्रोत फ़ाइल या तो ग्राफिकल व्यूअर, जावाबीन्स ट्री या गुण व्यू या का उपयोग करके अपडेट किया जा सकता है स्रोत संपादक द्वारा संपादित किया जा सकता है।

शायद मुझे अब Matisse के साथ रहना चाहिए।

असंबद्ध, यहां कोई asking for ग्रहण के भीतर रोक समस्या है।

निष्पक्ष होने के लिए, वीई का डोमेन काफी सीमित है, और शायद यह प्रतिबिंब जैसी मुश्किल चीजों पर पागल नहीं होगा। फिर भी, से बाहर GUI बनाने का दावा कोई भी जावा फ़ाइल रोक-इश लगता है। रनटाइम http://www.eecs.berkeley.edu/~jburnim/pubs/BurnimJalbertStergiouSen-ASE09.pdf

Looper उपयोगी हो सकता है के बाद से सबसे अनंत छोरों तुच्छ त्रुटियाँ हैं पर अनंत लूप्स की लाइटवेट पहचान: Looper:

1

मैं एक बर्कले कागज पाया। हालांकि, इस पेपर में भी रोक समस्या का उल्लेख नहीं है!

वे अपनी सीमाओं के बारे में क्या कहते हैं?

[Looper] आम तौर पर छोरों के बारे में कारण नहीं कर सकते हैं, जिसमें गैर-समाप्ति हर पाश चरण में ढेर उत्परिवर्तन के विवरण पर निर्भर करता है। ऐसा इसलिए है क्योंकि हमारा प्रतीकात्मक निष्पादन कंक्रीटिंग पॉइंटर्स में रूढ़िवादी है, और हमारे प्रतीकात्मक तर्क अपर्याप्त रूप से शक्तिशाली हैं।हम मानते हैं कि आकार विश्लेषण के साथ हमारी तकनीकों को जोड़ना और अधिक शक्तिशाली invariant पीढ़ी और साबित मूल्य भविष्य के काम मूल्यवान होगा।

दूसरे शब्दों में, "समस्या अगली रिलीज में तय की जाएगी"।

+0

रनटाइम लूप का पता लगाने जहां राज्य की जगह ज्ञात और तय की जाती है वास्तव में निर्णायक है; http://cs.stackexchange.com/a/11646/2242 देखें। –

संबंधित मुद्दे