क्या ऐसे कार्यक्रमों का एक सबसेट है जो रुकने की समस्या से बचता है


21

मैं बस रुकने की समस्या का एक और स्पष्टीकरण पढ़ रहा था, और यह मुझे उन सभी समस्याओं के बारे में सोच रहा था जो मैंने देखा है कि उदाहरणों के रूप में अनंत क्रम शामिल हैं। लेकिन मैं अपने कार्यक्रमों में अनंत दृश्यों का उपयोग कभी नहीं करता - वे बहुत लंबा लेते हैं। सभी वास्तविक दुनिया अनुप्रयोगों में निचले और ऊपरी सीमाएं होती हैं। यहां तक ​​कि वास्तविक भी वास्तविक रूप से वास्तविक नहीं हैं - वे लगभग 32/64 बिट्स आदि के रूप में संग्रहीत हैं।

तो सवाल यह है कि क्या कार्यक्रमों का एक सबसेट है जो निर्धारित किया जा सकता है कि क्या वे रुकते हैं? क्या यह अधिकांश कार्यक्रमों के लिए पर्याप्त है। क्या मैं भाषा के निर्माण का एक सेट बना सकता हूं जिसे मैं किसी कार्यक्रम की 'स्थिरता' निर्धारित कर सकता हूं। मुझे यकीन है कि इससे पहले कहीं अध्ययन किया गया है ताकि किसी भी संकेत की सराहना की जाएगी। भाषा पूरी तरह से ट्यूरिंग नहीं होगी, लेकिन क्या लगभग पूरी तरह से ट्यूरिंग जैसी कोई चीज है जो काफी अच्छी है?

स्वाभाविक रूप से पर्याप्त इस तरह के एक निर्माण को लूप के दौरान पुनरावृत्ति और अनबाउंड को बाहर करना होगा, लेकिन मैं आसानी से पर्याप्त के बिना एक कार्यक्रम लिख सकता हूं।

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

तिया

[अद्यतन करें]

टिप्पणियों और उत्तरों को पढ़ने के बाद शायद मुझे अपने प्रश्न को शांत करना चाहिए।

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

[अपडेट २]

यहाँ जवाब है, यह हाँ है, 1967 में http://www.isp.uni-luebeck.de/kps07/files/papers/kirner.pdf से वापस

हॉल्टिंग की समस्या कम से कम सैद्धांतिक रूप से ite नाइट-स्टेट सिस्टम के लिए हल की जा सकती है, जो पहले से ही 1967 [4] में मिन्स्की द्वारा तर्क दिया गया है: "... किसी भी-नाइट-स्टेट मशीन, यदि पूरी तरह से खुद को छोड़ दिया जाता है, तो अंततः पूरी तरह से आवधिक रूप से गिर जाएगी। दोहरावदार पैटर्न। इस दोहराए जाने वाले पैटर्न की अवधि मशीन की आंतरिक स्थिति की संख्या से अधिक नहीं हो सकती ... "

(और इसलिए यदि आप ट्यूरिंग मशीनों को खत्म करने के लिए चिपके रहते हैं तो आप एक दाना बना सकते हैं)


13
"अनंत क्रम ... बहुत लंबा है"। मुझे जोर से हंसाया।
ब्रायन ओकले

3
मेरा मानना ​​है कि SQL92 और रेगुलर एक्सप्रेशंस उन भाषाओं के उदाहरण हैं जो पड़ाव की गारंटी हैं।
इलियान एबिंग

2
कृपया उत्तर के रूप में "अपडेट 2 ..." पोस्ट करें।
एस.लॉट

2
आपको पुनरावृत्ति को बाहर करने की आवश्यकता नहीं है। यदि आप पुनरावृत्ति को कूली तर्कों के सख्त उप-शब्दों तक सीमित रखते हैं, तो आप हमेशा समाप्ति साबित कर पाएंगे। यह एक पर्याप्त आवश्यकता है - जब तक आप चर्च अंकों का उपयोग नहीं कर रहे हैं, तब तक "बंधे हुए छोरों" और एक जैसे आवश्यक नहीं हैं।
एसके-तर्क

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

जवाबों:


8

समस्या इनपुट पर नहीं है (जाहिर है, अनबाउंड इनपुट के साथ, आपके पास इनपुट पढ़ने के लिए अनबाउंड रनिंग टाइम हो सकता है), यह आंतरिक स्थिति की संख्या पर है।

जब आंतरिक स्थिति की संख्या बाध्य हो जाती है, तो सैद्धांतिक रूप से आप सभी मामलों में हल करने की समस्या को हल कर सकते हैं (बस इसे तब तक अनुकरण करें जब तक आप रुकने या किसी राज्य की पुनरावृत्ति तक नहीं पहुंच जाते), जब ऐसा नहीं होता है, तो ऐसे मामले हैं जहां यह हल नहीं है । लेकिन भले ही आंतरिक राज्यों की संख्या सीमा में है, यह भी इतना बड़ा है कि आंतरिक राज्यों की संख्या की सीमा का भरोसा करने के तरीके किसी भी लेकिन सबसे तुच्छ कार्यक्रमों की समाप्ति साबित करने के लिए बेकार हैं।

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


10

सबसे पहले, विचार करें कि अगर हमारे पास हॉल्टिंग डिटेक्टर होता तो क्या होता। हम विकर्ण तर्क से जानते हैं कि कम से कम एक कार्यक्रम मौजूद है जो हॉल्ट डिटेक्टर को या तो कभी रोकने या गलत उत्तर देने का कारण बनता है। लेकिन यह एक विचित्र और असंभावित कार्यक्रम है।

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

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


2
यदि कूदने को हमेशा आगे होना पड़ता है, तो कभी भी पीछे की ओर नहीं होने पर एक बयान हो सकता है। मैं BASIC भाषा के एक सीमित उप-समूह के बारे में सोच रहा हूं, जहां "GOTO X" का अर्थ है लाइन नंबर currentLine + X पर जाएं, और X 0. से अधिक होना चाहिए। यदि लाइन अमान्य है, तो रोकें। यह भंडारण मांगों को पूरा करेगा, लेकिन कुछ गैर-तुच्छ तर्क के लिए अनुमति देगा। यह संभवत: एक परिमित राज्य मशीन के बराबर है, जहां कोने एक ग्राफ बनाते हैं और उस ग्राफ में कोई चक्र नहीं हो सकता है, या फिर एफएसएम अमान्य है। इसके अलावा, कोई भी राज्य जो एक मृत अंत है, एक स्वीकार राज्य होना चाहिए।
जॉब

3
उदाहरण के लिए i = 1 से 10 के लिए - यह छोरों को बांधा जा सकता है, इसी तरह अच्छी तरह से व्यवहार करने वाले। तो क्या परिमित समस्याओं का एक वर्ग है जिसे हल किया जा सकता है - फ़र्मेट्स प्रमेय फिर से वास्तविक के अनंत अनुक्रम में शामिल है। लेकिन अगर हम डोमेन को 1 000 000 से कम संख्या तक सीमित करते हैं तो यह रुक जाता है।
daven11

2
स्थितियां क्यों नहीं? ऐसा लगता है कि बिना कूद के स्थितियां हमेशा रुकने के लिए दिखाई जा सकती हैं ...
बिली ओनेल

2
@ मिक्की: बेशक यह एक कमजोर तर्क है। मुद्दा यह है कि इस तरह के एक हॉल्टिंग डिटेक्टर सबूत को खोजने के बिना आवश्यक रूप से इस तरह के बयानों को साबित करने या अस्वीकृत करने में सक्षम होंगे । अंतर्ज्ञान जो मैं पाठक को यहाँ विकसित करने का इरादा कर रहा हूँ, वह यह है कि एक ऐसी भाषा जिसके लिए एक मामूली पड़ाव डिटेक्टर लिखा जा सकता है, एक ऐसी भाषा है जो संख्या सिद्धांत में भी सरल समस्याओं का प्रतिनिधित्व नहीं कर सकती है जैसे कि फ़र्मेट्स लास्ट प्रमेय या गोल्डबैक्स का अनुमान, और इसलिए शायद नहीं है एक बहुत ही उपयोगी भाषा।
एरिक लिपिपर्ट

3
@EricLippert: गलत। इस तरह की भाषा में लूप, उचित भंडारण और कई अन्य उपयोगी चीजें होंगी। इसमें लगभग कुछ भी कोड करना संभव है । निहारना, यहाँ यह है: coq.inria.fr
तर्क

6

मैं आपको Gödel, Escher, Bach पढ़ने की सलाह देता हूं । यह एक बहुत ही मज़ेदार और रोशन करने वाली पुस्तक है, जो अन्य बातों के अलावा, गोडेल की अपूर्णता प्रमेय और रुकने की समस्या को छूती है।

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


क्षमा करें, मैंने आपको गलत समझा। मैंने अपनी टिप्पणी हटा दी है, लेकिन मैं GEB की सिफारिश को पूरा करूंगा।
एपीग्रामग्राम

@zvrba कुछ समय से मेरी पढ़ने की सूची में है - शायद इसमें गोता लगाने का समय।
daven11

5

प्रत्येक प्रोग्राम के लिए जो सीमित मात्रा में मेमोरी (सभी प्रकार के भंडारण सहित) पर काम करता है, हॉल्टिंग समस्या को हल किया जा सकता है; यानी एक अपरिहार्य कार्यक्रम रन पर अधिक से अधिक मेमोरी लेने के लिए बाध्य है।

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


3

को (आंशिक रूप से) अपने प्रश्न का उत्तर दें "क्या कार्यक्रमों का एक सबसेट है जो हॉल्टिंग की समस्या से बचता है": हाँ, वास्तव में वहाँ है। हालांकि, यह सबसेट आश्चर्यजनक रूप से बेकार है (ध्यान दें कि मैं जिस उपसेट के बारे में बात कर रहा हूं, वह उन कार्यक्रमों का एक सख्त उपसमूह है जो रुक जाते हैं)।

'अधिकांश इनपुट' के लिए समस्याओं की जटिलता के अध्ययन को जेनेरिक-केस जटिलता कहा जाता है । आप संभावित इनपुट के कुछ सबसेट को परिभाषित करते हैं, यह साबित करते हैं कि यह सबसेट 'अधिकांश इनपुट' को कवर करता है और एक एल्गोरिथ्म देता है जो इस सबसेट के लिए समस्या को हल करता है।

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

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

दूसरे, आपको यह देखना होगा कि inputs अधिकांश इनपुट ’का क्या मतलब है। इसका अर्थ है कि इस एल्गोरिथ्म द्वारा 'लंबाई' n के एक यादृच्छिक कार्यक्रम की जांच की जा सकती है, संभावना यह है कि एन 1 अनंत तक जाता है। दूसरे शब्दों में, यदि n पर्याप्त बड़ा है, तो लंबाई n का एक यादृच्छिक कार्यक्रम लगभग निश्चित रूप से इस एल्गोरिथम द्वारा जांचा जा सकता है।

पेपर में वर्णित दृष्टिकोण द्वारा किन कार्यक्रमों की जाँच की जा सकती है? अनिवार्य रूप से, सभी कार्यक्रम जो एक राज्य को दोहराने से पहले रुकते हैं (जहां 'राज्य' मोटे तौर पर एक कार्यक्रम में कोड की एक पंक्ति से मेल खाती है)।

भले ही लगभग सभी कार्यक्रमों को इस तरह से चेक किया जा सकता है, लेकिन इस तरह से चेक किए जाने वाले कोई भी कार्यक्रम बहुत दिलचस्प नहीं हैं और वे आमतौर पर मनुष्यों द्वारा डिज़ाइन नहीं किए जाएंगे, इसलिए यह कोई व्यावहारिक मूल्य नहीं है।

यह यह भी इंगित करता है कि जेनेरिक-केस जटिलता शायद हॉल्टिंग समस्या के साथ हमारी मदद करने में सक्षम नहीं होगी, क्योंकि लगभग सभी दिलचस्प कार्यक्रम (जाहिरा तौर पर) को जांचना मुश्किल है। या, वैकल्पिक रूप से संपन्न: लगभग सभी कार्यक्रम निर्बाध हैं, लेकिन जांचना आसान है।


2
-1, यह इतने सारे स्तरों पर गलत है ...
user281377

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

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

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

@ammoQ: नहीं, अगर आप सीमित भंडारण के साथ वास्तविक दुनिया प्रणालियों के बारे में बात कर रहे हैं, तो रुकने की समस्या हल नहीं होगी, क्योंकि इसका मतलब होगा कि वास्तविक दुनिया प्रणाली का निर्माण जो राज्यों के संयोजन को संभाल सके। जैसा कि अधिकांश CPU में संभव रजिस्टर राज्यों की संख्या ब्रह्मांड में परमाणुओं की संख्या से अधिक है, आप ऐसा करने में सक्षम नहीं होंगे।
डेविड थॉर्नले

3

वहाँ है, और वास्तव में वास्तविक जीवन में ऐसे कार्यक्रम हैं जो हर समय अन्य समस्याओं के लिए समस्या को हल करते हैं। वे उस ऑपरेटिंग सिस्टम का हिस्सा हैं, जिस पर आप अपना कंप्यूटर चला रहे हैं। निर्विवादता एक अजीब दावा है जो केवल यह कहता है कि ऐसा कोई कार्यक्रम नहीं है जो अन्य सभी कार्यक्रमों के लिए काम करता है।

एक व्यक्ति ने सही ढंग से कहा कि हॉल्टिंग प्रूफ एकमात्र ऐसा प्रोग्राम है जिसके लिए इसे हल नहीं किया जा सकता है, क्योंकि यह एक दर्पण की तरह ही खुद को पहचानता है। इसी व्यक्ति ने यह भी कहा कि अगर कोई हॉल्टिंग मशीन होती, तो यह जादू होता, क्योंकि यह हमें समय से पहले बताकर कठिन गणित की समस्याएं बताती, अगर यह सॉल्वर एल्गोरिदम रुक जाता।

इन दोनों मामलों में धारणा यह है कि हॉल्टिंग मशीन ट्रेस नहीं करती है क्योंकि इसका कोई प्रमाण नहीं है कि यह निशान है। हालाँकि, वास्तव में यह उस प्रोग्राम को ट्रेस / रन करता है, जिस पर दिए गए इनपुट के साथ इसे चलाया जाता है।

कम से कम तार्किक प्रमाण सरल है। यदि उसे कम से कम पहला चरण ट्रेस करने की आवश्यकता नहीं है, तो उसे उस प्रोग्राम के साथ इनपुट की आवश्यकता नहीं होगी, जिस पर वह चलता है। किसी भी जानकारी का उपयोग करने के लिए, यह विश्लेषण करने की कोशिश करने से पहले कम से कम एक चरण का पता लगाना होगा कि वह रास्ता कहाँ जा रहा है।

शीर्ष उत्तर में बताई गई कठिन गणित की समस्याएं वे हैं जहां आप उत्तर का पता लगाने के लिए तेजी से आगे नहीं बढ़ सकते हैं, जिसका अर्थ है कि रुकने की समस्या को तब तक जारी रखना होगा जब तक कि कुछ पैटर्न पहचानने योग्य नहीं होते।

इसलिए हॉल्टिंग समस्या से निपटने के लिए केवल व्यावहारिक तर्क यह है कि एक हॉल्टिंग मशीन समस्या के हल की तुलना में तेजी से अनुकूलित समस्या हल करने के परिणाम को निर्धारित नहीं कर सकती है।

इस तर्क के लिए एक औपचारिक प्रमाण देना कठिन है, और हालांकि मेरा मानना ​​है कि मैं इसे किसी को भी समझाने की कोशिश कर सकता हूं, लेकिन इसका परिणाम यह होगा कि उन्हें गुस्सा-गुस्सा और वानर झूमर की तरह एक बंदर को फेंकना होगा। यह सबसे अच्छा है कि उन लोगों के साथ बहस न करें।


1

यहाँ जवाब है, यह हाँ है, 1967 में http://www.isp.uni-luebeck.de/kps07/files/papers/kirner.pdf से वापस

हॉल्टिंग की समस्या कम से कम सैद्धांतिक रूप से ite नाइट-स्टेट सिस्टम के लिए हल की जा सकती है, जो पहले से ही 1967 [4] में मिन्स्की द्वारा तर्क दिया गया है: "... किसी भी-नाइट-स्टेट मशीन, यदि पूरी तरह से खुद को छोड़ दिया जाता है, तो अंततः पूरी तरह से आवधिक रूप से गिर जाएगी। दोहरावदार पैटर्न। इस दोहराए जाने वाले पैटर्न की अवधि मशीन की आंतरिक स्थिति की संख्या से अधिक नहीं हो सकती ... "

(और इसलिए यदि आप ट्यूरिंग मशीनों को खत्म करने के लिए चिपके रहते हैं तो आप एक दाना बना सकते हैं)

बेशक यह कितना समय लगता है यह एक और सवाल है


0

क्या उन कार्यक्रमों का एक सबसेट है जो निर्धारित किया जा सकता है यदि वे रुक जाते हैं?

हाँ।

क्या यह अधिकांश कार्यक्रमों के लिए पर्याप्त है?

"सबसे" परिभाषित करें।

क्या मैं भाषा के एक समूह का निर्माण कर सकता हूं, जिसे मैं किसी कार्यक्रम की 'गतिरोध' का निर्धारण कर सकता हूं?

हाँ।

वहाँ लगभग पूरी तरह से अच्छा है जो काफी ट्यूरिंग के रूप में ऐसी बात है?

परिभाषित "लगभग"।

कई लोग whileबयान या पुनरावृत्ति का उपयोग किए बिना पायथन लिखते हैं ।

बहुत से लोग केवल सरल पुनरावृत्तियों या काउंटरों के forसाथ बयान का उपयोग करके जावा लिखते हैं जिन्हें समाप्त करने के लिए तुच्छ रूप से सिद्ध किया जा सकता है; और वे पुनरावृत्ति के बिना लिखते हैं।

बचना whileऔर पुनरावृत्ति करना बहुत आसान है ।


किसी दिए गए प्रोग्राम के लिए जिसमें सभी इनपुट्स बंधे हुए हैं, क्या आप निर्धारित कर सकते हैं कि क्या प्रोग्राम रुकता है?

नहीं।

यदि हां, तो भाषा की बाधाएं क्या हैं और इनपुट सेट की सीमाएं क्या हैं।

उम। हॉल्टिंग समस्या का अर्थ है कि प्रोग्राम कभी भी प्रोग्राम के बारे में चीजों को उतना जटिल नहीं बना सकता है जितना कि वह स्वयं। हॉल्टिंग की समस्या को दूर करने के लिए आप बड़ी संख्या में बाधाओं में से किसी एक को जोड़ सकते हैं।

हॉल्टिंग समस्या के लिए मानक दृष्टिकोण गणितीय औपचारिकता के थोड़े "अमीर" सेट का उपयोग करने की अनुमति देने की तुलना में प्रोग्रामिंग भाषा में उपलब्ध है।

भाषा को प्रतिबंधित करने की तुलना में प्रूफ सिस्टम का विस्तार करना आसान है। कोई भी प्रतिबंध एक एल्गोरिथ्म के लिए तर्क देता है जो प्रतिबंध के कारण व्यक्त करना मुश्किल है।

इन निर्माणों का अधिकतम सेट एक ऐसी भाषा का निर्धारण करेगा, जिसे रोका जा सकता है या नहीं। क्या इस पर कुछ अध्ययन किया गया है?

हाँ। इसे "ग्रुप थ्योरी" कहा जाता है। संचालन के एक सेट के तहत मूल्यों का एक सेट बंद हो गया। बहुत अच्छी तरह से समझा सामान।


"लगभग" वह बिट है जो मैं पूछ रहा हूं। क्या समस्याओं का परिमित वर्ग है जिसके लिए एक कार्यक्रम को रुकने के लिए कहा जा सकता है और समस्या कितनी सीमित है? उदाहरण के लिए यदि कथन (i <10) है तो प्रिंट करें (i) सभी के लिए रुक जाता है। अगर मैं i के डोमेन को 32 बिट पूर्णांक तक सीमित करता हूं तो यह बहुत अधिक हो जाता है।
daven11

ध्यान रखें एक forपाश है एक पाश जबकि, और लोगों को अक्सर बस से हालत अवधि में और अधिक जटिल चीजों को रखा x < 42
बिली ओनेल

@ बिलियोनियल: अच्छी बात है। पायथन में एक forलूप बहुत है, बहुत ही कसकर एक पुनरावृत्त के माध्यम से काम करने के लिए विवश। forजावा में एक अधिक सामान्य लूप, हालांकि, अतिरिक्त शर्तें शामिल कर सकते हैं जो एक पुनरावृत्त के सरल उपयोग को अमान्य करते हैं।
S.Lott

"क्या समस्याओं के परिमित वर्ग हैं जिनके लिए एक कार्यक्रम को रुकने के लिए कहा जा सकता है?" जवाब हाँ है। "समस्या कितनी सीमित है?" उम। परिमित परिमित है। यदि आप वास्तविक संख्याओं का अनुमान लगाने और प्राकृतिक संख्याओं से चिपके रहने का प्रयास करते हैं, तो सभी गणितीय कार्यों के तहत बंद, आप साधारण समूह सिद्धांत कर रहे हैं। मॉड्यूलर अंकगणित। कुछ खास नहीं। यह स्पष्ट नहीं है कि आप क्या पूछ रहे हैं। क्या आप पूछ रहे हैं कि मॉड्यूलर अंकगणित क्या है?
S.Lott

@ S.Lott का अर्थ है एक मशीन में दर्शाए गए नंबर, न कि अमूर्त अर्थों में नंबर। इसलिए संख्याओं को बिट्स की निश्चित संख्या के रूप में सोचें। इन नंबरों के पूर्णांक और वास्तविक से थोड़ा अलग नियम हैं। आशा है कि समझ में आता है।
daven11
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.