क्या यह गणना करना संभव है कि क्या दो कार्य समान रूप से समान हैं?


9

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

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

क्या मुझे सांप्रदायिक शब्दार्थ को देखना चाहिए, या असंबंधित है?

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

जवाबों:


8

हाँ। यदि आप यह सत्यापित कर सकते हैं कि वे समान हैं, तो एक कंप्यूटर हो सकता है।

यहाँ Coq में पूर्णांक प्रकार के लिए एक त्वरित विनिर्देश है:

Inductive natlist : Type :=
| nil : natlist
| cons : nat → natlist → natlist.

Fixpoint is_sorted (l : natlist ) : bool :=
    match l with
    |  nil => true
    |  (cons x nil) => true
    |  (cons x (cons y r)) => if x <= y then is_sorted (cons y r) else false
    end.

...

Theorem sort_spec : forall l, is_sorted (sort_list l).

एक विनिर्देश सीधे आश्रित प्रकारों का उपयोग करते हुए घोषणा में एन्कोड किया जा सकता है।

इस विशेष समस्या के लिए, जॉन डार्लिंगटन ने 70 के दशक में प्रदर्शित किया कि छँटाई एल्गोरिदम के 6 परिवारों को यांत्रिक रूप से एक कार्यान्वयन में विनिर्देशन द्वारा परिवर्तित किया जा सकता है; मेरा मानना ​​है कि यह "शब्दार्थ-आधारित कार्यक्रम व्युत्पत्ति" के नाम से जाता है।

सॉफ्टवेयर-इंजीनियरिंग की दुनिया में, एक्सटेंसिक रूप से समतुल्य कार्यों को खोजने को "सिमेंटिक क्लोन डिटेक्शन" के रूप में जाना जाता है।

डेव क्लार्क ने CS StackExchange: /cs/2059/how-do-you-check-if-two-algorithms-return-the-same-result पर इस सवाल का अच्छा जवाब दिया। -किसी-किसी भी इनपुट

यह सब औपचारिक तरीकों और प्रोग्रामिंग भाषाओं की छतरियों के नीचे आता है । नकारात्‍मक शब्दार्थ, मॉडलिंग अर्थ के लिए तकनीकों का एक वर्ग है, लेकिन वे ऑपरेशनल शब्दार्थ की तुलना में उपयोग करने में मुश्किल होने के पक्ष से बाहर हो गए हैं।


जवाब के लिए धन्यवाद! यह वही है जो मैं खोज रहा था।
मैथिज स्टीन

4
मैं उस क़ानून से बहुत असहमत हूं, जो कि अर्थ-संबंधी शब्दार्थ "पक्ष से बाहर" हो गया है। यह काफी हद तक निर्भर करता है कि आप किससे पूछते हैं।
बाउर

5

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

सत्यापन कई रूपों में आगे बढ़ सकता है, आप ZFC सेट-थ्योरी में परिचालन शब्दार्थ का उपयोग करके उदाहरण के लिए कर सकते हैं। हालांकि, यह दर्दनाक होगा। यदि संप्रदायात्मक शब्दार्थ मौजूद हैं, तो उनका उपयोग भी किया जा सकता है, लेकिन अच्छे शब्दार्थ शब्दार्थ केवल कुछ भाषाओं के लिए ही मौजूद हैं। आमतौर पर एक प्रोग्राम लॉजिक्स का उपयोग करता है, उदाहरण के लिए, लॉयर लॉजिक , कार्यक्रमों की बहुआयामी समानता दिखाने के लिए। ऐसा करने में सक्षम होने के लिए, आमतौर पर फ़ंक्शंस वाली भाषाओं के लिए होरे लॉजिक्स को एक स्वयंसिद्ध कथन की आवश्यकता होती हैf=gxα.f(x)=g(x), ऐसा मानते हुए f तथा g प्रकार के कार्य हैं αβ (होरे लॉजिक्स के लिए चुने गए दृष्टिकोण के विवरण के साथ स्वयंसिद्ध variy का विवरण)।


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

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

... एक निर्णायक प्रासंगिक समानता है। लेकिन ध्यान दें कि आर। लोडर ने दिखाया कि यहां तक ​​कि फाइनेंशियल पीसीएफ में एक अविश्वसनीय संदर्भीय तुल्यता है।
मार्टिन बर्गर

-2

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


1
क्या यह नहीं बताता है कि "... आंशिक कार्यों की किसी भी गैर-तुच्छ संपत्ति के लिए ...", इसलिए यह संभवतः कुल कार्यों के लिए निर्णायक नहीं होगा?
मैथिज स्टीन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.