8

मैं होरे लॉजिक देख रहा हूं और मुझे लूप इनवेरिएंट खोजने की विधि समझने में समस्याएं आ रही हैं।होरे लॉजिक लूप इनवेरिएंट

क्या कोई लूप इनवेरिएंट की गणना करने के लिए उपयोग की जाने वाली विधि को समझा सकता है?

और लूप इनवेरिएंट को "उपयोगी" होना चाहिए?

मैं केवल की तरह, सरल उदाहरण के साथ काम कर अपरिवर्तनशीलताओं खोजने और आंशिक और पूर्ण सुधार साबित उदाहरण में हूँ:

{ i ≥ 0 } while i > 0 do i := i−1 { i = 0 } 

उत्तर

4

हम साबित (आंशिक) कार्यक्रमों की सत्यता के लिए होरे के तर्क के बारे में बात कर रहे हैं, तो आप पूर्व शर्त और postcondition का उपयोग करें, कार्यक्रम विघटित और होरे के तर्क अनुमान प्रणाली के नियमों का उपयोग बना सकते हैं और एक आगमनात्मक सूत्र साबित करने के लिए।

अपने उदाहरण में, आप कार्यक्रम विघटित नियम

{p} while b do S {p^not(b)} <=> {p^b} S {p} 

का उपयोग कर अपने मामले में चाहते हैं

  • p: मैं ≥ 0
  • ख: i> 0
  • एस: i: = i-1।

तो अगले चरण में हम {i ≥ 0^i > 0} i := i−1 {i ≥ 0} का अनुमान लगाते हैं। इसे और अधिक आसानी से अनुमानित और साबित किया जा सकता है। मुझे उम्मीद है कि यह मदद करता है।

2

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

2

मैं अगर यह आपके प्रश्न का उत्तर होगा यकीन नहीं है, लेकिन सिर्फ मामले में यह करता है:

  • ए 'पाश अपरिवर्तनीय "अनौपचारिक रूप से इस तथ्य का एक बयान है कि पहले और एक के एक यात्रा के बाद सही रहता है पाश। यह अनिवार्य रूप से उस लूप के संबंध में कार्यक्रम की स्थिरता बाधा को परिभाषित करता है।
  • मुझे आपको यह बताने के लिए होयर लॉजिक के बारे में पर्याप्त जानकारी नहीं है कि एक लूप इनवेरिएंट की गणना कैसे की जाएगी, लेकिन मुझे संदेह है कि ऐसी चीज औपचारिक प्रमाण भाषा की तुलना में मोरेसो का विश्लेषण करने वाले कोड की भाषा पर निर्भर करेगी । क्या आपके पास औपचारिक एल्गोरिदमिक वर्णन है जिसके साथ आप काम कर रहे हैं? मैं थोड़ा और पृष्ठभूमि के साथ आगे बढ़ने में सक्षम हो सकता है।
  • एक उपयोगी पाश invariant किसी एप्लिकेशन की स्थिति के बारे में कुछ विशिष्ट वर्णन करेगा। उदाहरण के लिए यदि आप सम्मिलन सॉर्ट लिख रहे थे, तो मुख्य तत्व गति लूप के लिए एक उपयोगी पाश इनवेरिएंट अनिवार्य रूप से बताएगा कि (उप) सूची में लूप के निष्पादन से पहले और बाद में ऑब्जेक्ट का एक ही संग्रह होता है, और शायद पहले वाले तत्व सॉर्ट किए गए क्रम क्रमबद्ध क्रम में रहते हैं।
+0

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

+1

हे, टिप्पणी के लिए धन्यवाद :) मेरी शिक्षा में शब्द 'invariant' को बहुत कुछ फेंक दिया गया था, बिना किसी औपचारिक स्पष्टीकरण के - मैंने स्पष्ट रूप से कुछ गलत विचार उठाए। –

+0

मुझे लगता है कि जब होरे लॉजिक की बात आती है, तो इनवेरिएंट बिना किसी अच्छे स्पष्टीकरण के फेंक दिया जाता है ... – nunopolonia