簡體   English   中英

以歸納方式證明兩個函數定義的相等性

[英]To prove equality of two function definitions inductively

我如何進行歸納以建立語句moll n = doll n ,with

moll 0 = 1                               --(m.1)
moll n = moll ( n-1) + n                 --(m.2)

doll n = sol 0 n                         --(d.1)
 where
  sol acc 0 = acc +1                     --(d.2)
  sol acc n = sol ( acc + n) (n-1) -- ?    (d.2)

我試圖證明n = 0的基本情況

doll 0 = (d.2) = 1 = (m.1) = moll 0 , which is correct.

現在為n+1 ,顯示出來

moll 2n = doll (n + 1)

=> doll (n + 1) = (d.2) = soll (acc + n + 1) n

但現在呢? 我怎樣才能進一步簡化它?

你的n+1步中有一個錯誤。 我懷疑這是因為你是Haskell及其優先規則的新手。

moll (n+1)不是,因為你寫了moll 2n - 我假設你的意思是moll (2*n) ,因為moll 2n是一個haskell語法錯誤。

在任何情況下, moll (n+1)實際上是moll n + n + 1 ,或者,加上額外的括號只是為了明確:

(moll n) + (n + 1)

也就是說,你將moll應用於n ,然后在結果中添加n + 1

從這里你應該能夠應用歸納假設並繼續前進。


更明確地說,因為你似乎仍然遇到麻煩:

moll (n+1) == (moll n) + (n + 1)       (by m.2)
           == (doll n) + (n + 1)       (by induction hypot.)
           == (sol 0 n) + (n + 1)      (by d.1)

現在,作為一個引理:

sol x n == (sol 0 n) + x

這可以通過n的歸納來證明。 n等於0顯然是正確的。

對於引理的歸納步驟:

sol x (n+1) == (sol (x + (n+1)) n)       (By d.2, for (n+1) > 0)
            == (sol 0 n) + (x + (n+1))   (By the induction hypot.)
            == (sol 0 n) + (n+1) + x     (This is just math; re-arranging)
            == ((sol 0 n) + (n+1)) + x
            == (sol (n+1) n) + x         (By the induction hypot. again)
            == (sol 0 (n+1)) + x         (By d.2 again)

我第二次使用歸納假設似乎有點奇怪,但請記住歸納假設說:

 sol x n == (sol 0 n) + x

對於所有x 因此,我可以將它應用於添加到(sol 0 n)任何內容,包括n+1

現在,回到主要證據,使用我們的引理:

moll (n+1) == (sol 0 n) + (n + 1)      (we had this before)
           == sol (n+1) n              (by our lemma)
           == sol 0 (n+1)              (by d.2)
           == doll (n+1)               (by d.1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM