Recursion 伊莎贝尔简单双函数
我是伊莎贝尔的新朋友,一般来说,我是霍尔。 教科书中的练习之一是: 定义递归函数double::nat⇒ nat和prove double m=加m 我仍在试图给它下定义,但我搞不懂。, 以下是我迄今为止所做的工作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 ::
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)),我没有得到错误,那么这是正确的吗?是的。这是预期的结果。