Haskell fibonacci函数正确性的归纳证明

Haskell fibonacci函数正确性的归纳证明,haskell,Haskell,常见Fibonacci函数的Haskell实现 菲布斯洛 |n==0=1——纤维1 |n==1=1——纤维2 |否则=fibSlow(n-1)+fibSlow(n-2)--fib.3 fibSlow正确性的归纳证明是什么?要通过归纳证明自然数上函数的正确性,您需要证明它对某些基本情况是正确的,然后假设它对较低的情况是正确的,那么它对较高的参数值是正确的。因此,首先验证fibSlow 0=1,然后验证fibSlow 1=1,然后验证对于n>1,fibSlow n等于第(n-1)个fibonac

常见Fibonacci函数的Haskell实现

菲布斯洛

|n==0=1——纤维1

|n==1=1——纤维2

|否则=fibSlow(n-1)+fibSlow(n-2)--fib.3


fibSlow正确性的归纳证明是什么?

要通过归纳证明自然数上函数的正确性,您需要证明它对某些基本情况是正确的,然后假设它对较低的情况是正确的,那么它对较高的参数值是正确的。因此,首先验证
fibSlow 0
=1,然后验证
fibSlow 1
=1,然后验证对于n>1,
fibSlow n
等于第(n-1)个fibonacci数加上第(n-2)个fibonacci数。这里您可以假设这些数字是
fibSlow(n-1)
fibSlow(n-2)
,因为
fibSlow
对于归纳假设中小于n的所有输入都是正确的


这可能看起来很琐碎。。。因为它是!Haskell中这样一个示例的全部要点是,您可以编写明显正确的代码。当你去证明它是正确的,证明只是写自己,相当于看代码,并注意到它清楚地表明了你正试图证明什么。这是像Haskell这样的声明性语言的一个很好的特性。

很抱歉,我已经有一段时间没有正式看过这种材料了,所以如果这是家庭作业的话,你最好看看其他来源

我想你想证明一个单调函数的存在性,它描述了递归的“进程”。这种情况应该很简单:参数本身是单调递减的。对于非负n,递归调用将使用较小的n',并且该n'永远不会小于零

您还可以使用电源感应来证明函数是在所有n上定义的。您已经声明它是在0和1上定义的,如果它是在n和n+1上定义的,那么它就是在n+2上定义的。从递归调用的定义可以明显看出这一点


我想你可能会读到Jech的集合论书中序数一章中的一些形式。

首先你必须告诉我们你所说的正确是什么意思。