[附注]
什么是归纳
[附注] 什么是归纳
“归纳”(induction)这个词在不同领域里意思不一样,先分清楚。
- 在经验科学和日常推理里,归纳推理是从有限个观察得出普遍结论:见过的天鹅都是白的,于是“所有天鹅都是白的”。与它对立的是演绎推理(deduction):从前提出发,按逻辑规则推出结论,前提为真则结论必真。归纳推理的结论可能出错(澳大利亚有黑天鹅),休谟(Hume)在 18 世纪指出,归纳推理没有逻辑上的保证,这就是归纳问题。
- 数学里的数学归纳法名字里虽然有“归纳”,却是一种演绎:证明 ,再证明“ 蕴涵 ”,就能断定所有自然数都满足 ,没有任何“可能出错”的余地。 [定理] 结构归纳原理(structural induction) 与 [定理] 对推导归纳 使用的也是这种演绎证明方法。
数学归纳法的历史很长。古希腊的欧几里得(Euclid)证明素数有无穷多个时,已经有了它的影子;16 世纪的莫罗利科(Maurolico)、17 世纪的帕斯卡(Pascal)在讨论二项式系数时比较明确地用了它;“数学归纳法”这个名字是 19 世纪德摩根(De Morgan)起的。19 世纪末,戴德金(Dedekind)和皮亚诺(Peano)把它写成了自然数的公理之一,并指出它其实来自“自然数是包含 、对后继封闭的最小集合”。 [定理] 结构归纳原理(structural induction) 把这个想法从自然数推广到由规则搭起来的有限树。
在程序语言理论里,和归纳对立的是余归纳(coinduction)。归纳对应“最小”的集合,处理有限的、搭得完的对象;余归纳对应“最大”的集合,处理可以无限展开的对象,比如永不停机的程序、无穷长的数据流。 [定义] 项的集合 的有限项与 [定义] 一步归约 的有限推导都属于归纳定义的对象。