बर्ताव को घटिया क्यों बताया जा रहा है?


13

इस क्षेत्र में लिस्कॉव का कार्य व्यवहार उप-योग पर केंद्रित था, जिसके अलावा इस लेख में चर्चा की गई प्रकार की सुरक्षा की भी आवश्यकता है कि उपप्रकारों को कुछ अनुबंधों में सुपरटेप द्वारा गारंटीकृत सभी अपरिवर्तनों को संरक्षित करना है। [३] सबटाइपिंग की यह परिभाषा आम तौर पर अनिर्दिष्ट है, इसलिए इसे एक प्रकार के चेकर द्वारा सत्यापित नहीं किया जा सकता है।

से: http://www.wikiwand.com/en/Subtyping#/Function_types

जवाबों:


24

बता दें कि oटाइप के संचालन का अनुबंध Tसभी इनपुटों के लिए है। अब तय करें कि क्या oउपप्रकार का संचालन S <: Tउस अनुबंध को संतुष्ट करता है: आपने हाल्टिंग समस्या को हल कर लिया है ।

आम तौर पर, S::oसमान फ़ंक्शन की गणना करना चाहिए जैसे T::oकि S <: T। यह तय करना कि क्या दो प्रोग्राम समान फ़ंक्शन की गणना करते हैं, फंक्शन प्रॉब्लम कहलाता है और हॉल्टिंग समस्या को हल करने के बराबर है।

सामान्य तौर पर, किसी भी गैर-तुच्छ रनटाइम संपत्ति को सांख्यिकीय रूप से तय करना लगभग हमेशा हैल्टिंग समस्या के बराबर होता है।


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

5
@BenjaminGruenbaum जोर्ग का उत्तर और आपकी टिप्पणी सही है, लेकिन इसमें एक सूक्ष्मता है जो मैं स्पष्ट करना चाहूंगा। किसी विशिष्ट कार्यक्रम के बारे में संपत्ति साबित करना अक्सर संभव होता है । वहाँ सिर्फ एक एल्गोरिथ्म नहीं है जिसे आप आँख बंद करके अनुसरण कर सकते हैं जो सभी कार्यक्रमों के लिए काम करेगा । जावा में लिखी इस विधि पर विचार करें: BigInteger sum(int[] arr) { BigInteger sum = BigInteger.ZERO; for (int x: arr) sum = sum.add(BigInteger.valueOf(x)); return sum; }यह साबित करना मुश्किल नहीं है कि विशेष विधि हमेशा एक पूर्णांक सरणी के तत्वों का योग लौटाती है और कुछ और नहीं करती है (बशर्ते तर्क शून्य नहीं है)।
डोभाल

1
और जब यह रुकने की समस्या के समतुल्य नहीं है, तो यह अक्सर बदतर भी होता हैक्योंकि असंभव पहले से ही कठिन नहीं था।
user2357112

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

@ डोभाल: बहुत अच्छी बात। हालांकि यह सच है कि आपके पास एक एल्गोरिथ्म नहीं हो सकता है जो एक यादृच्छिक कार्यक्रम की समाप्ति और / या शुद्धता साबित करता है, ऐसे में प्रोग्राम लिखना संभव है ताकि आप उनकी शुद्धता को साबित कर सकें।
जियोर्जियो

12

क्योंकि कार्यक्रमों के व्यवहार के बारे में लगभग हर सवाल अनिर्दिष्ट है। राइस प्रमेय द्वारा , फार्म की कोई निर्णय समस्या:

कुछ प्रोग्राम ऐसे फ़ंक्शन की गणना करते हैं जिनके पास यह गुण है, अन्य प्रोग्राम ऐसे फ़ंक्शन की गणना करते हैं जिनके पास यह गुण नहीं है। एक कार्यक्रम पी को देखते हुए, पी द्वारा गणना की गई फ़ंक्शन में उपरोक्त संपत्ति है या नहीं?

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

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


3
आप थोड़ा स्पष्ट कर सकते हैं: यह नहीं है कि एक दिया गया कार्यक्रम, चाहे कितना भी रोगात्मक हो, सभी विश्लेषणों का विरोध कर सकता है, लेकिन किसी भी विश्लेषण के लिए, कम से कम एक कार्यक्रम मौजूद है जिसे ठीक से वर्गीकृत नहीं किया जा सकता है।
नाथन तुग्गी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.