होरे तर्क
होरे तर्क (फ्लोयड-होरे तर्क या होरे नियम के रूप में भी जाना जाता है) कंप्यूटर प्रोग्राम की शुद्धता के बारे में दृढ़ता से तर्क करने के लिए तार्किक नियमों के एक क्रम के साथ औपचारिक प्रणाली है। यह 1969 में ब्रिटिश कंप्यूटर वैज्ञानिक और तर्कशास्त्री टोनी होरे द्वारा प्रस्तावित किया गया था, और बाद में होरे और अन्य शोधकर्ताओं द्वारा परिष्कृत किया गया था।[1] मूल विचार रॉबर्ट डब्ल्यू फ़्लॉइड के काम से उत्पन्न हुए थे, जिन्होंने फ्लोचार्ट के लिए समान प्रणाली[2] प्रकाशित की थी।
होरे त्रिगुण
होरे तर्क की केंद्रीय विशेषता होरे त्रिगुण है। त्रिगुण बताता है कि कोड के एक टुकड़े का निष्पादन कैसे गणना की स्थिति को बदलता है। होरे त्रिगुण का रूप है
जहां और अभिकथन हैं और कमांड है।[note 1] को पूर्व अवस्था और को पश्च अवस्था नाम दिया गया है- जब पूर्व शर्त पूर्ण हो जाती है, तो कमांड निष्पादित करने से पश्च अवस्था स्थापित हो जाती है। विधेय तर्क में अभिकथन सूत्र हैं।
होरे तर्क साधारण अनिवार्य प्रोग्रामिंग भाषा के सभी निर्माणों के लिए स्वयंसिद्ध और अनुमान नियम प्रदान करता है। होरे के मूल पेपर में सरल भाषा के नियमों के अलावा, होरे और कई अन्य शोधकर्ताओं द्वारा तब से अन्य भाषा निर्माणों के लिए नियम विकसित किए गए हैं। समवर्ती, प्रक्रियाओं, व्यतिक्रम, और संकेत के लिए नियम हैं।
आंशिक और कुल शुद्धता
मानक होरे तर्क का उपयोग करते हुए, केवल आंशिक शुद्धता ही सिद्ध की जा सकती है। कुल शुद्धता के लिए अतिरिक्त रूप से समाप्ति की आवश्यकता होती है, जिसे अलग से या जबकि नियम के विस्तारित संस्करण के साथ सिद्ध किया जा सकता है।[3] इस प्रकार होरे त्रिगुण का सहज ज्ञान युक्त पठन है- जब भी , के निष्पादन से पहली अवस्था को धारण करता है, तो बाद में धारण करेगा, या समाप्त नहीं होता है। बाद की स्थिति में, कोई "बाद" नहीं है, इसलिए कोई भी कथन हो सकता है। वास्तव में, यह व्यक्त करने के लिए कि समाप्त नहीं होता है, असत्य होने के लिए कोई भी चुन सकता है।
यहाँ और इस लेख के अन्य भागों में "समाप्ति" का अर्थ व्यापक अर्थों में है कि गणना अंततः समाप्त हो जाएगी, अर्थात यह अनंत छोरों की अनुपस्थिति का अर्थ है यह कार्यान्वयन सीमा के उल्लंघन (जैसे शून्य से विभाजन) की अनुपस्थिति को प्रोग्राम को समय से पहले रोकना नहीं दर्शाता है। अपने 1969 के पेपर में, होरे ने समाप्ति की एक संकीर्ण धारणा का उपयोग किया, जिसमें कार्यान्वयन सीमा के उल्लंघन की अनुपस्थिति भी सम्मिलित थी, और समाप्ति की व्यापक धारणा के लिए अपनी प्राथमिकता व्यक्त की क्योंकि यह कार्यान्वयन-स्वतंत्र होने का दावा करता है-[4]
ऊपर उद्धृत सिद्धांतों और नियमों में एक और कमी यह है कि वे इस बात के प्रमाण के लिए कोई आधार नहीं देते हैं कि प्रोग्राम सफलतापूर्वक समाप्त हो गया है। समाप्त करने में विफलता अनंत लूप के कारण हो सकती है या यह कार्यान्वयन-परिभाषित सीमा के उल्लंघन के कारण हो सकता है, उदाहरण के लिए, संख्यात्मक संकार्य की सीमा, स्टोरेज का आकार, या ऑपरेटिंग सिस्टम की समय सीमा। इस प्रकार अंकन “” की व्याख्या की जानी चाहिए "बशर्ते कि कार्यक्रम सफलतापूर्वक समाप्त हो जाए, इसके परिणामों के गुणों को द्वारा वर्णित किया गया है।" स्वयंसिद्धों को अनुकूलित करना काफी आसान है ताकि उन्हें गैर-समाप्ति प्रोग्रामों के "परिणामों" की भविष्यवाणी करने के लिए उपयोग नहीं किया जा सके लेकिन स्वयंसिद्धों का वास्तविक उपयोग अब कई कार्यान्वयन-निर्भर विशेषताओं के ज्ञान पर निर्भर करेगा, उदाहरण के लिए, कंप्यूटर का आकार और गति, संख्याओं की सीमा और अतिप्रवाह तकनीक का विकल्प। अनंत लूप से बचने के प्रमाण के अलावा, किसी प्रोग्राम की "सशर्त" शुद्धता को सिद्ध करना और चेतावनी देने के लिए कार्यान्वयन पर भरोसा करना सम्भवतः बेहतर है, यदि इसे कार्यान्वयन सीमा के उल्लंघन के परिणामस्वरूप प्रोग्राम के निष्पादन को त्यागना पड़ा हो।
नियम
खाली कथन स्वयंसिद्ध स्कीमा
NOP (कोड) नियम का दावा है कि skip कथन कार्यक्रम की स्थिति को नहीं बदलता है, इस प्रकार जो कुछ भी पहले सत्य है skip बाद में भी सही है।[note 2]
असाइनमेंट स्वयंसिद्ध स्कीमा
असाइनमेंट स्वयंसिद्ध बताता है कि, असाइनमेंट के बाद, कोई भी विधेय जो पहले असाइनमेंट के दाईं ओर के लिए सही था, अब वेरिएबल के लिए है। औपचारिक रूप से, चलो P एक अभिकथन हो जिसमें चर हो x मुक्त चर और बाध्य चर हैं। तब:
कहाँ कथन को दर्शाता है P जिसमें प्रत्येक फ्री वेरिएबल्स और बाउंड वेरिएबल्स हैं x अभिव्यक्ति द्वारा प्रतिस्थापन (तर्क) किया गया है E.
असाइनमेंट स्वयंसिद्ध योजना का अर्थ है कि सच्चाई के आफ्टर-असाइनमेंट सत्य के बराबर है P. इस प्रकार थे असाइनमेंट से पहले सत्य, असाइनमेंट स्वयंसिद्ध द्वारा, फिर P जिसके बाद सच होगा। इसके विपरीत थे झूठा (यानी सच) असाइनमेंट स्टेटमेंट से पहले, P बाद में गलत होना चाहिए।
मान्य ट्रिपल्स के उदाहरणों में शामिल हैं:
सभी पूर्व शर्त जो एक्सप्रेशन द्वारा संशोधित नहीं की जाती हैं उन्हें पोस्टकंडिशन में ले जाया जा सकता है। पहले उदाहरण में, असाइन करना इस तथ्य को नहीं बदलता है , इसलिए दोनों कथन पश्च शर्त में प्रकट हो सकते हैं। औपचारिक रूप से, यह परिणाम स्वयंसिद्ध स्कीमा को लागू करके प्राप्त किया जाता है P प्राणी ( और ), कौन सी पैदावार प्राणी ( और ), जिसे बदले में दी गई पूर्व शर्त में सरलीकृत किया जा सकता है .
असाइनमेंट स्वयंसिद्ध योजना यह कहने के बराबर है कि पूर्व शर्त को खोजने के लिए, पहले पोस्ट-कंडीशन लें और असाइनमेंट के बायीं ओर की सभी घटनाओं को असाइनमेंट के दायीं ओर से बदलें। इस गलत तरीके से सोचने के द्वारा इसे पीछे की ओर करने की कोशिश न करने के लिए सावधान रहें: ; यह नियम निरर्थक उदाहरणों की ओर ले जाता है जैसे:
पहली नज़र में आकर्षक लगने वाला एक और गलत नियम है ; यह निरर्थक उदाहरणों की ओर ले जाता है जैसे:
जबकि एक दी गई पोस्टकंडिशन P विशिष्ट रूप से पूर्व शर्त निर्धारित करता है , इसका उलट सत्य नहीं है। उदाहरण के लिए:
- ,
- ,
- , और
असाइनमेंट स्वयंसिद्ध योजना के मान्य उदाहरण हैं।
होरे द्वारा प्रस्तावित असाइनमेंट स्वयंसिद्ध तब लागू नहीं होता है जब एक से अधिक नाम एक ही संग्रहित मूल्य को संदर्भित कर सकते हैं। उदाहरण के लिए,
गलत है अगर x और y एक ही चर (अलियासिंग (कंप्यूटिंग)) का संदर्भ लें, हालांकि यह असाइनमेंट स्वयंसिद्ध योजना (दोनों के साथ) का एक उचित उदाहरण है और प्राणी ).
रचना का नियम
Verifying swap-code without auxiliary variables | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
होरे की रचना का नियम क्रमिक रूप से निष्पादित कार्यक्रमों पर लागू होता है S और T, कहाँ S से पहले निष्पादित करता है T और लिखा है (Q को मध्य स्थिति कहा जाता है):[5]
उदाहरण के लिए, असाइनमेंट स्वयंसिद्ध के निम्नलिखित दो उदाहरणों पर विचार करें:
और
अनुक्रमण नियम से, एक निष्कर्ष निकलता है:
एक और उदाहरण सही बॉक्स में दिखाया गया है।
सशर्त नियम
सशर्त नियम कहता है कि एक पोस्टकंडीशन Q के लिए समान then और else भाग भी पूर्ण की एक पश्च शर्त है if...endif कथन।[6] में then और यह else हिस्सा, अस्वीकृत और नकारात्मक स्थिति B पूर्व शर्त में जोड़ा जा सकता है P, क्रमश। स्थिति, B, के दुष्प्रभाव नहीं होने चाहिए।
- परिणाम_नियम में एक उदाहरण दिया गया है।
यह नियम होरे के मूल प्रकाशन में निहित नहीं था।[1]हालांकि, एक बयान के बाद से
वन-टाइम लूप निर्माण के समान प्रभाव है
सशर्त नियम अन्य होरे नियमों से प्राप्त किया जा सकता है। इसी तरह, अन्य व्युत्पन्न प्रोग्राम निर्माण के लिए नियम, जैसे for कुंडली, do...until कुंडली, switch, break, continue को होरे के मूल पेपर से नियमों में परिवर्तन करके कम किया जा सकता है।
परिणाम नियम
यह नियम पूर्व शर्त को मजबूत करने की अनुमति देता है और/या स्थिति को कमजोर करने के लिए . इसका उपयोग किया जाता है उदा। के लिए वस्तुतः समान पोस्टकंडिशन प्राप्त करने के लिए then और यह else भाग।
उदाहरण के लिए, का प्रमाण
सशर्त नियम लागू करने की आवश्यकता है, जो बदले में सिद्ध करने की आवश्यकता है
- , या सरलीकृत
के लिए then भाग, और
- , या सरलीकृत
के लिए else भाग।
हालाँकि, के लिए असाइनमेंट नियम then भाग को चुनने की आवश्यकता है P जैसा ; नियम आवेदन इसलिए पैदावार
- , जो तार्किक रूप से समतुल्य है
- .
पूर्व शर्त को मजबूत करने के लिए परिणाम नियम की आवश्यकता है असाइनमेंट नियम से प्राप्त करने के लिए सशर्त नियम के लिए आवश्यक है।
इसी प्रकार, के लिए else भाग, असाइनमेंट नियम पैदावार
- , या समकक्ष
- ,
इसलिए परिणाम नियम के साथ लागू किया जाना है और प्राणी और , क्रमशः, फिर से पूर्व शर्त को मजबूत करने के लिए। अनौपचारिक रूप से, परिणाम नियम का प्रभाव उसे भूल जाना है के प्रवेश पर जाना जाता है else भाग, चूंकि असाइनमेंट नियम के लिए उपयोग किया जाता है else भाग को उस जानकारी की आवश्यकता नहीं है।
जबकि नियम
यहाँ P पाश अपरिवर्तनीय है, जिसे लूप बॉडी द्वारा संरक्षित किया जाना है S. लूप समाप्त होने के बाद, यह invariant P अभी भी धारण करता है, और इसके अलावा लूप को समाप्त करने का कारण होना चाहिए। सशर्त नियम के रूप में, B के दुष्प्रभाव नहीं होने चाहिए।
उदाहरण के लिए, का प्रमाण
जबकि नियम को सिद्ध करने की आवश्यकता है
- , या सरलीकृत
- ,
जो कार्य नियम से आसानी से प्राप्त हो जाता है। अंत में, पोस्टकंडिशन करने के लिए सरलीकृत किया जा सकता है .
एक अन्य उदाहरण के लिए, सटीक वर्गमूल की गणना करने के लिए निम्न अजीब प्रोग्राम को औपचारिक रूप से सत्यापित करने के लिए नियम का उपयोग किया जा सकता है x एक मनमानी संख्या का a-भले ही x एक पूर्णांक चर है और a वर्ग संख्या नहीं है:
के साथ समय नियम लागू करने के बाद P प्राणी true, यह साबित करना बाकी है
- ,
जो स्किप नियम और परिणाम नियम से अनुसरण करता है।
वास्तव में, अजीब कार्यक्रम आंशिक रूप से सही है: यदि यह समाप्त हो गया है, तो यह निश्चित है x में (संयोग से) का मान होना चाहिए a का वर्गमूल। अन्य सभी मामलों में, यह समाप्त नहीं होगा; इसलिए यह पूरी तरह से सही नहीं है।
जबकि कुल शुद्धता के लिए नियम
यदि #जबकि_नियम को निम्नलिखित द्वारा प्रतिस्थापित किया जाता है, तो होरे कैलकुलस का उपयोग कुल शुद्धता, यानी समाप्ति के साथ-साथ आंशिक शुद्धता को साबित करने के लिए भी किया जा सकता है। आमतौर पर, प्रोग्राम शुद्धता की विभिन्न धारणाओं को इंगित करने के लिए घुंघराले ब्रेसिज़ के बजाय स्क्वायर ब्रैकेट का उपयोग किया जाता है।
इस नियम में, लूप इनवेरिएंट को बनाए रखने के अलावा, एक एक्सप्रेशन के माध्यम से समाप्ति प्रमाण भी साबित होता है t, जिसे लूप वेरिएंट कहा जाता है, जिसका मूल्य एक अच्छी तरह से स्थापित संबंध के संबंध में सख्ती से घटता है < कुछ डोमेन सेट पर D प्रत्येक पुनरावृत्ति के दौरान। तब से < के सदस्यों की एक सख्ती से घटती श्रृंखला (आदेश सिद्धांत) अच्छी तरह से स्थापित है D की केवल सीमित लंबाई हो सकती है, इसलिए t हमेशा के लिए घटता नहीं रह सकता। (उदाहरण के लिए, सामान्य क्रम < सकारात्मक पूर्णांकों पर अच्छी तरह से स्थापित है , लेकिन न तो पूर्णांकों पर न ही धनात्मक वास्तविक संख्याओं पर ; ये सभी सेट गणितीय अर्थ में हैं, कंप्यूटिंग अर्थ में नहीं, ये सभी विशेष रूप से अनंत हैं।)
लूप इनवेरिएंट को देखते हुए P, स्थिति B का अर्थ होना चाहिए t का न्यूनतम तत्व नहीं है D, अन्यथा शरीर के लिए S कम नहीं हो सका t आगे कोई भी, यानी नियम का आधार झूठा होगा। (यह कुल शुद्धता के लिए विभिन्न नोटेशनों में से एक है।) [note 3]
के पूर्ण-शुद्धता प्रमाण के लिए, #जबकि_नियम के पहले उदाहरण को फिर से शुरू करना
कुल शुद्धता के लिए जबकि नियम लागू किया जा सकता है उदा। D सामान्य क्रम और अभिव्यक्ति के साथ गैर-ऋणात्मक पूर्णांक हैं t प्राणी , जिसे बाद में साबित करने की आवश्यकता होती है
अनौपचारिक रूप से बोलते हुए, हमें यह साबित करना होगा कि दूरी प्रत्येक पाश चक्र में घटता है, जबकि यह हमेशा गैर-ऋणात्मक रहता है; यह प्रक्रिया सीमित चक्रों तक ही चल सकती है।
पिछले प्रमाण लक्ष्य को सरल बनाया जा सकता है
- ,
जिसे इस प्रकार सिद्ध किया जा सकता है:
- असाइनमेंट नियम द्वारा प्राप्त किया जाता है, और
- तक मजबूत किया जा सकता है परिणाम नियम द्वारा।
- जबकि_नियम के दूसरे उदाहरण के लिए, निश्चित रूप से कोई अभिव्यक्ति नहीं t पाया जा सकता है कि खाली लूप बॉडी द्वारा घटाया गया है, इसलिए समाप्ति सिद्ध नहीं की जा सकती।
यह भी देखें
टिप्पणियाँ
- ↑ Hoare originally wrote "" rather than "".
- ↑ This article uses a natural deduction style notation for rules. For example, informally means "If both α and β hold, then also φ holds"; α and β are called antecedents of the rule, φ is called its succedent. A rule without antecedents is called an axiom, and written as .
- ↑ Hoare's 1969 paper didn't provide a total correctness rule; cf. his discussion on p.579 (top left). For example Reynolds' textbook[3] gives the following version of a total correctness rule: when z is an integer variable that doesn't occur free in P, B, S, or t, and t is an integer expression (Reynolds' variables renamed to fit with this article's settings).
संदर्भ
- ↑ 1.0 1.1 Hoare, C. A. R. (October 1969). "An axiomatic basis for computer programming". Communications of the ACM. 12 (10): 576–580. doi:10.1145/363235.363259. S2CID 207726175.
- ↑ R. W. Floyd. "Assigning meanings to programs." Proceedings of the American Mathematical Society Symposia on Applied Mathematics. Vol. 19, pp. 19–31. 1967.
- ↑ 3.0 3.1 John C. Reynolds (2009). प्रोग्रामिंग भाषाओं का सिद्धांत. Cambridge University Press.) Here: Sect. 3.4, p. 64.
- ↑ Hoare (1969), p.578-579
- ↑ Huth, Michael; Ryan, Mark (2004-08-26). कंप्यूटर विज्ञान में तर्क (second ed.). CUP. p. 276. ISBN 978-0521543101.
- ↑ Apt, Krzysztof R.; Olderog, Ernst-Rüdiger (December 2019). "होरे के तर्क के पचास साल". Formal Aspects of Computing. 31 (6): 759. doi:10.1007/s00165-019-00501-3. S2CID 102351597.
अग्रिम पठन
- Robert D. Tennent. Specifying Software (a textbook that includes an introduction to Hoare logic, written in 2002) ISBN 0-521-00401-2
बाहरी संबंध
- KeY-Hoare is a semi-automatic verification system built on top of the KeY theorem prover. It features a Hoare calculus for a simple while language.
- j-Algo-modul Hoare calculus — A visualisation of the Hoare calculus in the algorithm visualisation program j-Algo