चावल के प्रमेय से चिंतित


37

सारांश: राइस के प्रमेय के अनुसार, सब कुछ असंभव है। और फिर भी, मैं यह हर समय असंभव सामान करता हूं !


बेशक, राइस प्रमेय बस यह नहीं कहता कि "सब कुछ असंभव है"। यह कुछ और नहीं बल्कि विशिष्ट कहता है: "कंप्यूटर प्रोग्राम की प्रत्येक संपत्ति गैर-संगणनीय है।"

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

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

  • किसी कार्यक्रम को रोकने से पहले कितने कदम चलते हैं? यह तय करने के लिए कि क्या यह संख्या परिमित है या असीम है, हॉल्टिंग समस्या ठीक है, जो गैर-गणना योग्य है। तय करने के लिए इस नंबर अधिक से अधिक या कम है कि क्या की तुलना में कुछ परिमित है तुच्छ! बस चरणों तक कार्यक्रम चलाएं और देखें कि यह रुकता है या नहीं। आसान!nn

  • इसी प्रकार, क्या प्रोग्राम अपने पहले निष्पादन चरणों में यादा से कम मेमोरी का उपयोग करता है ? तुच्छ रूप से गणना करने योग्य।nm

  • क्या प्रोग्राम टेक्स्ट में नाम के एक वैरिएबल का उल्लेख है ? एक तुच्छ पाठ संबंधी विश्लेषण उत्तर को प्रकट करेगा।k

  • क्या कार्यक्रम कमांड आमंत्रित करता है ? फिर, उस कमांड नाम की तलाश में प्रोग्राम टेक्स्ट को स्कैन करें।σ

मैं बहुत सारे गुण देख सकता हूं जो गैर-संगणक भी लगते हैं; उदाहरण के लिए, कार्यक्रम को पूरा करने के लिए कितने जोड़ होते हैं? खैर, यह लगभग पूछने के समान है कि कार्यक्रम कितने चरणों में प्रदर्शन करता है, जो वस्तुतः हैल्टिंग समस्या है। लेकिन ऐसा लगता है कि कार्यक्रम के गुणों के नाव-लोड हैं जो गणना करने के लिए वास्तव में आसान है। और फिर भी, राइस का प्रमेय जोर देता है कि उनमें से कोई भी गणना योग्य नहीं है।

मुझे यहां क्या समझ नहीं आ रहा है?


8
"राइस के प्रमेय के अनुसार, सब कुछ असंभव है।" - नहीं। "कंप्यूटर प्रोग्राम की प्रत्येक संपत्ति गैर-संगणनीय है।" - नहीं। आप अकेले नहीं हैं, हालांकि: अधिकांश छात्र इस गलत धारणा का सामना करते हैं।
राफेल

जवाबों:


36

इस चर्चा के प्रयोजनों के लिए, "प्रोग्राम" एक कोड का एक टुकड़ा है जो हमेशा एक पूर्णांक को इनपुट के रूप में लेता है, और या तो हमेशा के लिए चलता है या पूर्णांक देता है। हम कहते हैं कि दो कार्यक्रमों और रहे extensionally बराबर अगर वे एक ही समारोह की गणना, यानी, हर नंबर के लिए या तो दोनों और को चलाने के हमेशा के लिए, या वे दोनों समाप्त कर देंगे और उत्पादन एक ही नंबर।fgnf(n)g(n)

एक extensional संपत्ति कार्यक्रमों की एक संपत्ति है कि सम्मान extensional समानता, यानी, अगर और extensionally हैं बराबर तो वे या तो दोनों संपत्ति है या दोनों यह नहीं है।PfgP

गैर- आयामी गुणों के कुछ उदाहरण यहां दिए गए हैं :

  1. कार्यक्रम चरणों के भीतर । (हम हमेशा एक कार्यक्रम को एक समान रूप से बराबर में संशोधित कर सकते हैं जो अधिक समय तक चलता है।)n
  2. कार्यक्रम निष्पादन के पहले चरणों के भीतर मेमोरी कोशिकाओं से कम का उपयोग करता है । (हम हमेशा एक कार्यक्रम को एक समान रूप से बराबर करने के लिए संशोधित कर सकते हैं ताकि यह बिना किसी अच्छे कारण के कुछ मेमोरी का उपयोग करे।)nm
  3. कार्यक्रम के पाठ में एक चर नाम का उल्लेख है k। (हम चर का नाम बदल सकते हैं।)
  4. क्या प्रोग्राम कमांड आमंत्रित करता है । यह वही है पर थोड़ा निर्भर हो सकता है है, लेकिन अगर यह कुछ है कि किसी तरह से नकली किया जा सकता है, तो हम बचने कर सकते हैं और अभी भी एक प्रोग्राम है जो extensionally मूल एक के बराबर है।σσσ

मुझे यकीन है कि आपने देखा है कि मैंने आपके कथित काउंटर-उदाहरणों को राइस के प्रमेय में सूचीबद्ध किया है, जो कहता है:

प्रमेय (चावल): एक गणनीय extensional कार्यक्रमों की संपत्ति या तो सभी कार्यक्रमों की या कोई भी आयोजित करता है।

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


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

1
सामान्य तौर पर आप यह जांचते हैं कि दो विशेष कार्यक्रम समान रूप से समान हैं , यह साबित करके कि यह मामला है। क्या आप इस तथ्य पर आपत्ति करते हैं कि सभी पूर्णांकों के लिए , भले ही कंप्यूटर सभी मूल्यों के लिए इस समानता की "जांच" नहीं कर सकता है? ऐसा न होने की अपेक्षा है। एक प्रोग्राम लिखने के बीच एक अंतर है जो एक बूलियन मूल्य की गणना करता है, और यह साबित करता है कि एक निश्चित कथन का एक निश्चित सत्य मूल्य है। ऐसी चीजें हैं जो हम साबित कर सकते हैं लेकिन गणना नहीं कर सकते हैं (जैसे कि दो विशेष कार्यक्रम अत्यधिक समान हैं, या यह अतिरिक्त सराहनीय है)। n+m=m+n
लेडी बाउर

इसके अलावा, आप अपने तर्क में तर्क की एक अजीब छलांग लगा रहे हैं: चूँकि बहुआयामी समानता निर्णायक नहीं है, राइस का प्रमेय झूठा हो सकता है। ऐसा कैसे? और सिर्फ इसलिए कि बहुआयामी समानता अकल्पनीय है, इसका मतलब यह नहीं है कि इसके कोई उदाहरण नहीं हैं जो हम तय कर सकते हैं। जिन लोगों का मैंने उल्लेख किया है - हम उन्हें तय कर सकते हैं।
लेडी बाउर

36

मौलिक गलतफहमी:

कंप्यूटर प्रोग्राम की प्रत्येक संपत्ति गैर-कम्प्यूटेबल है

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

{MfMP}

पर्णपाती नहीं है। आपके द्वारा उल्लिखित गुणों के लिए, आपको एक उपयुक्त नहीं मिलेगा , जिसके लिए कार्यक्रमों के सेट में यह फॉर्म है। एक फ़ंक्शन के कुछ कार्यक्रमों में संपत्ति हो सकती है जबकि अन्य (समान फ़ंक्शन के लिए) नहीं हो सकती है। कुछ उदाहरणों के लिए यहां देखें ।P

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

ऐसा प्रतीत नहीं होता है कि सिंटैक्टिक गुणों के लिए जाना जाता है; इस सवाल को देखें ।


1
मैं पहले वाक्य के बारे में या उसके बाद खो गया। माफ़ कीजिये। क्या कोई शब्दार्थ और वाक्यगत संपत्ति के बीच के अंतर पर विस्तार कर सकता है?
गणितऑर्किड

@ मैमेटेमिकलऑर्चिड: आप उस वाक्य को सुरक्षित रूप से अनदेखा कर सकते हैं; पहला पैराग्राफ आपके लिए आवश्यक सभी जानकारी रखता है। मैं वैसे भी विस्तृत करूँगा।
राफेल

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