2014-07-15 44 views
0

伊莎貝爾的新品牌,以及一般的HOL編程。 教科書中的練習之一是:伊莎貝爾簡單的雙功能

定義一個遞歸函數double :: nat⇒nat並證明double m = add m m。

im仍然試圖定義它,但我無法弄清楚。, 這是我迄今爲止所做的。

fun double :: "nat => nat" where 
"double 0 = 0" | //my base case 
"double (n) = //I don't know what to do here 

我有一個函數add定義如下。

fun add :: "nat ⇒ nat ⇒ nat" where 
"add 0 n = n" | 
"add (Suc m) n = Suc(add m n)" 

但我不認爲我打算在double的定義中使用add。 也是一個解釋與答案將不勝感激。 謝謝 陰雨

回答

1

揣摩如何在double nSuc來表達double (Suc n)。這將給你一個遞歸的定義。

+0

這是正確的:fun double ::「nat => nat」,其中 「double 0 = 0」| 「double(Suc n)= double n + Suc(Suc(0))」 – Eridanis

+1

原則上是的,但是當練習是關於double和''''時,使用內建的「op + add'。也許你可以通過使用沒有'op +'的'Suc's(或者'add'來表示相同的方程)? – chris

+1

我把它改成了「double(Suc n)= Suc(Suc(double n))」,我沒有錯誤,這是正確的嗎? – Eridanis