Tôi đang cố gắng tìm hiểu chính xác ý nghĩa của chương trình để chứng minh một chương trình. Tôi bắt đầu từ đầu và bị treo lên trên các bước đầu tiên/giới thiệu về chủ đề.Hiển thị hai hàm fibonacci khác nhau là tương đương
Trong this paper trên tổng số lập trình hàm, hai định nghĩa của hàm fibonacci được đưa ra. Các truyền thống một:
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?
và một phiên bản đệ quy đuôi tôi chưa bao giờ thấy trước đây:
fib' n = f n 0 1
f 0 a b = a
f n a b = f (n-1) b (a+b)
giấy này sau đó tuyên bố rằng nó là "đơn giản" để chứng minh bằng quy nạp rằng cả hai chức năng trả lại kết quả tương tự cho tất cả các số nguyên dương n. Đây là lần đầu tiên tôi nghĩ đến việc phân tích các chương trình như thế này. Nó khá thú vị khi nghĩ rằng bạn có thể chứng minh rằng hai chương trình là tương đương, vì vậy tôi ngay lập tức đã cố gắng để làm bằng chứng này bằng cảm ứng bản thân mình. Kỹ năng toán học của tôi bị gỉ hoặc nhiệm vụ không thực sự đơn giản.
tôi đã chứng minh cho 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
tôi đã n = k giả định
fib' k = fib k
f k 0 1 = fib k
tôi bắt đầu cố gắng để chứng minh rằng nếu giả định đúng, sau đó các chức năng cũng equivilant cho n = k + 1 (và do đó tất cả chúng đều tương đương với tất cả n> = 1 QED)
fib' (k+1) = fib (k+1)
f (k+1) 0 1 = fib k + fib (k-1)
Tôi đã thử nhiều thao tác khác nhau ion, thay thế giả định vào đúng thời điểm và vân vân, nhưng tôi không thể lấy LHS bằng RHS và do đó chứng minh rằng các hàm/chương trình là tương đương nhau. Tôi đang thiếu gì? Bài viết đề cập rằng tác vụ tương đương với việc chứng minh
f n (fib p) (fib (p+1)) = fib (p+n)
bằng cảm ứng cho tùy ý p. Nhưng tôi không thấy nó thật sự như thế nào. Các tác giả đã đến phương trình này như thế nào? Đó là một biến đổi hợp lệ trên phương trình chỉ khi p = 0
. Tôi không thấy nó có nghĩa là nó hoạt động như thế nào cho p. Để chứng minh nó cho p tùy ý yêu cầu bạn phải trải qua một lớp cảm ứng khác. Chắc chắn công thức chính xác để chứng minh là
fib' (n+p) = fib (n+p)
f (n+p) 0 1 = fib (n+p)
Cho đến nay cũng không giúp được gì. Bất cứ ai có thể chỉ cho tôi cách cảm ứng sẽ được thực hiện? Hoặc liên kết đến một trang hiển thị bằng chứng (tôi đã tìm kiếm, không thể tìm thấy bất kỳ điều gì).
'fib (n + 2) = fib (n + 1) + fib (n + 2) 'rõ ràng là một lỗi đánh máy, có lẽ họ có nghĩa là 'fib (n + 2) = fib (n + 1) + fib n' là toán học đúng, nhưng bị loại bỏ khỏi Haskell http://hackage.haskell.org/trac/haskell-prime/wiki/RemoveNPlusK hợp lệ –
Bạn có thể quan tâm đến điều này: http://www.ats-lang.org/EXAMPLE/#FIBexample - ví dụ về lập trình với định lý chứng minh (đối với hàm Fibonacci). Cũng lưu ý rằng các đặc điểm kỹ thuật được đưa ra ở đó cho Fib là quy nạp, nhưng việc thực hiện là đệ quy đuôi và được hiển thị để phù hợp với thông số kỹ thuật. –