Recursion 伊莎贝尔简单双函数

Recursion 伊莎贝尔简单双函数,recursion,logic,isabelle,Recursion,Logic,Isabelle,我是伊莎贝尔的新朋友,一般来说,我是霍尔。 教科书中的练习之一是: 定义递归函数double::nat⇒ nat和prove double m=加m 我仍在试图给它下定义,但我搞不懂。, 以下是我迄今为止所做的工作 fun double :: "nat => nat" where "double 0 = 0" | //my base case "double (n) = //I don't know what to do here 我有一个函数add,定义如下 fun add ::

我是伊莎贝尔的新朋友,一般来说,我是霍尔。 教科书中的练习之一是:

定义递归函数double::nat⇒ nat和prove double m=加m

我仍在试图给它下定义,但我搞不懂。, 以下是我迄今为止所做的工作

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。 另外,如果您能给出解释并给出答案,我们将不胜感激。 非常感谢。

试着用
double n
Suc
来表达
double(Suc n)
。这将给你一个递归的定义。

这是否正确:有趣的双重::“nat=>nat”其中“double 0=0”|“double(Suc n)=double n+Suc(Suc(0))”原则上是,但是,当练习是关于
double
add
时,使用内置的加法器
op+
是一种欺骗。也许你可以只使用
Suc
s来表达相同的方程,而不使用
op+
(或者
add
),我把它改为“double(Suc n)=Suc(Suc(double n)),我没有得到错误,那么这是正确的吗?是的。这是预期的结果。