Recursion 递归和归纳证明之间的关系是什么?
递归和归纳证明之间的关系是什么 比如说,Recursion 递归和归纳证明之间的关系是什么?,recursion,type-theory,induction,Recursion,Type Theory,Induction,递归和归纳证明之间的关系是什么 比如说,fn(n) 递归是fn(n)调用自身,直到满足基本条件 归纳法是当基本条件满足时,尝试证明(基本情况+1)也是正确的 看来递归和归纳是不同的方向。一个从n到基本情况,另一个从基本情况到无限 有人能详细解释一下这个想法吗?递归和归纳几乎是同一回事!如果使用具有依赖类型的编程语言(如Agda),这一点会变得很明显,但在某种程度上也可以在没有依赖类型的情况下进行演示 记住,由于类型不同,类型是命题,程序是证明。当您编写类型为Nat->Nat(我将使用Haskel
fn(n)
递归是fn(n)
调用自身,直到满足基本条件
归纳法是当基本条件
满足时,尝试证明(基本情况+1)
也是正确的
看来递归和归纳是不同的方向。一个从n
到基本情况
,另一个从基本情况
到无限
有人能详细解释一下这个想法吗?递归和归纳几乎是同一回事!如果使用具有依赖类型的编程语言(如Agda),这一点会变得很明显,但在某种程度上也可以在没有依赖类型的情况下进行演示 记住,由于类型不同,类型是命题,程序是证明。当您编写类型为
Nat->Nat
(我将使用Haskell表示法)的函数时,您试图证明,给定一个自然数,您的程序将终止并生成另一个自然数。现在我们可以有这样一个定义:
f 0 = 1
f (1 + n) = n * f n
这既是f
的递归定义,同时也是其终止的归纳证明
您可以通过以下方式将其作为证据阅读:
让我们证明fx对于任意x终止
- 基本情况:根据定义,我们有
常量,因此它终止李>f0
- 归纳情况:如果我们假设
termiates,fn
也终止(因为它调用的所有函数都终止)f(1+n)
类似地,递归是指首先定义基本情况,然后根据前面的值定义进一步的值。看,方向很容易互换我强烈反对这一点,尤其是你认为方向不是一件有效的事情。如果仅仅因为自然数在下面有界,而不是在上面有界,你就不能简单地改变它。我不熟悉结构归纳法,我认为这和作为证明形式的数学归纳法是有区别的。这就是说,由于你的回答已被OP接受,很明显,你的描述使他满意,这也是本网站的最终目的,因此我将删除我的回答。@MathematicalIAN1975,我不认为本网站的目的是OP满意。我们应该互相指出错误,努力找出真相。现在是方向反转。我提供了方向颠倒的句子示例。句子错了吗?我认为他们仍然是正确的。归纳和递归都是关于形成有限的推理/方法调用链。我不认为有限链的反转有什么错,是吗?我试图通过引入“供给/需求方向”的概念来阐明我的观点。我不确定这是否有意义,但这就对了D@Rostor我同意你在这里说的“我不认为这个网站的目的是为了让OP满意。”。我不认为数学归纳是一个有限的过程,也不认为递归是有限的(除非纯粹是在计算机编程的背景下)。我认为归纳法是一种证明某种陈述的方法,这种陈述适用于所有自然数。正是这个概念意味着这个过程不是有限的,因为自然数的集合不是有限的。考虑从1到n的自然数之和,归纳给出一个PROF,而归纳仅仅是计算总和的另一种方法。我想无论如何我们都不会说服对方。但是不管怎样,辩论这些事情是很好的。