दिखा रहा है मैं एक प्रोग्राम को सही साबित करने के लिए वास्तव में क्या सीखने का प्रयास कर रहा हूं। मैं खरोंच से शुरू कर रहा हूं और पहले चरण/विषय के परिचय पर लटका रहा हूं।दो अलग-अलग फाइबोनैकी कार्यों को समतुल्य
कुल कार्यात्मक प्रोग्रामिंग पर this paper में, फाइबोनैकी फ़ंक्शन की दो परिभाषाएं दी जाती हैं। पारंपरिक एक:
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
--fib (n+2) = fib (n+1) + fib (n+2) --The definition as given in the paper
--It seems incorrect to me. Typo?
और एक पूंछ पुनरावर्ती संस्करण मैंने पहले कभी नहीं देखा था:
fib' n = f n 0 1
f 0 a b = a
f n a b = f (n-1) b (a+b)
कागज तो दावा किया है कि यह प्रेरण द्वारा साबित होता है कि दोनों कार्यों ही परिणाम लौटने "सरल" है सभी सकारात्मक इंटीग्रियों के लिए एन। यह पहली बार है जब मैंने इस तरह के कार्यक्रमों का विश्लेषण करने का विचार किया है। यह सोचना काफी दिलचस्प है कि आप साबित कर सकते हैं कि दो कार्यक्रम समतुल्य हैं, इसलिए मैंने तुरंत इस सबूत को खुद को शामिल करके करने का प्रयास किया। या तो मेरे गणित कौशल जंगली हैं या कार्य वास्तव में सभी सीधा नहीं है।
मैं n के लिए साबित कर दिया = 1
fib' 1 = f 1 0 1
= f 0 1 1
= 1
fib 1 = 1 (By definition)
therefore
fib' n = fib n for n = 1
मैं एन = कश्मीर धारणा
fib' k = fib k
f k 0 1 = fib k
मैं साबित होता है कि इस धारणा सच है, तो कार्य भी कर रहे हैं के लिए बराबर की कोशिश कर रहा शुरू कर दिया एन = k + 1 (और इसलिए वे सभी सभी n के लिए बराबर हैं> = 1 QED)
fib' (k+1) = fib (k+1)
f (k+1) 0 1 = fib k + fib (k-1)
मैं कोशिश की है विभिन्न manipulat आयनों, सही समय पर धारणा को प्रतिस्थापित कर रहा है, लेकिन मुझे केवल एलएचएस बराबर आरएचएस नहीं मिल सकता है और इसलिए साबित होता है कि कार्य/कार्यक्रम बराबर हैं। मैं क्या खो रहा हूँ? पेपर का उल्लेख है कि यह कार्य
f n (fib p) (fib (p+1)) = fib (p+n)
मनमाने ढंग से पी के लिए प्रेरण के बराबर है। लेकिन मैं नहीं देखता कि यह कैसे सच है। लेखकों ने इस समीकरण पर कैसे पहुंचे? यह केवल p = 0
पर समीकरण पर एक वैध परिवर्तन है। मैं नहीं देखता कि इसका मतलब है कि यह मनमाने ढंग से पी के लिए काम करता है। मनमाने ढंग से पी के लिए इसे साबित करने के लिए आपको प्रेरण की एक और परत से गुजरना होगा। निश्चित रूप से साबित करने के लिए सही सूत्र
fib' (n+p) = fib (n+p)
f (n+p) 0 1 = fib (n+p)
अभी तक इससे कोई मदद नहीं मिली है। क्या कोई मुझे दिखा सकता है कि प्रेरण कैसे किया जाएगा? या एक पृष्ठ से लिंक जो सबूत दिखाता है (मैंने खोज की, कुछ भी नहीं मिला)।
'मिथ्या (n + 2) = मिथ्या (n + 1) + मिथ्या (n + 2)' स्पष्ट रूप से कोई गलती है तो वे शायद मतलब 'fib (n + 2) = fib (n + 1) + fib n' जो गणितीय रूप से सही है, लेकिन वैध Haskell से हटाया जा रहा है http://hackage.haskell.org/trac/haskell-prime/wiki/RemoveNPlusK –
आपको इसमें रुचि हो सकती है: http://www.ats-lang.org/EXAMPLE/#FIBexample - प्रमेय सिद्ध करने के साथ प्रोग्रामिंग का एक उदाहरण (एक फाइबोनैकी फ़ंक्शन के लिए)। यह भी ध्यान रखें कि फिब के लिए दिया गया विनिर्देश अपरिवर्तनीय है, लेकिन कार्यान्वयन पूंछ-पुनरावर्ती है और इसे spec के अनुरूप दिखाया गया है। –