Coinduction - 清晰,简洁的描述

时间:2009-10-06 01:05:05

标签: computer-science theory

我正在学习coinduction( not induction)作为静态分析课程的一部分。在互联网上肆虐,我根本没有找到清晰,简洁的描述:

  • 什么是coinduction
  • coinduction如何实际证明某些东西(似乎coinduction就像在我读过的治疗中挥舞着一只神奇的手)。
  • 什么命题需要共同证明
  • 如何操作coinductive证明

3 个答案:

答案 0 :(得分:5)

我的理解(可能是错误的)是这样的:

Coinduction是一种证明无限数据结构的方法。

就像感应一样,起初好像在作弊。要意识到的关键是:而不是:

  1. 证明某些东西适用于基本情况
  2. 证明它适用于每个“单步”,假设它适用于所有(有限)情况
  3. 然后声称它适用于所有(有限)案例(这是归纳法)
  4. 你改为:

    1. 在假设它适用于所有非有限情况的情况下证明它适用于每个“单步”
    2. 声称它因此适用于所有非有限的情况(这是共同诱导,并且它是合理的,因为每个非有限情况是单步的(有限的)序列,其后是由假设起作用的非有限部分)< / LI>

      Coinduction是一种有用的证明技术,用于建立关于无限数据结构的结构“明显”命题。不幸的是(或者不是?)它通常对证明“明显”的东西很有用,这使得它更难以看出它是如何证明任何东西而不仅仅是挥手。

      This paper在某些方面有所帮助,而在其他方面则令人困惑(至少那些在类别理论中不熟悉的人,我自己也算在其中)。

答案 1 :(得分:4)

共同诱导是沿着计算或过程的步骤的归纳。如果每个步骤都有一些东西,那么它适用于无限计算及其可能无限的结果数据结构。

答案 2 :(得分:3)

在逻辑编程的背景下,Coinduction更容易理解。我推荐以下教程论文:Gupta等人的综合逻辑编程及其应用,它出现在Proc。 2007年逻辑程序设计国际会议。正如递归对应于归纳(最小固定点语义),共同递归对应于共同诱导(最大固定点语义)。人们可以将共同递归视为“没有基本情况的递归”。在没有基本情况的情况下,终止标准必须基于识别计算中的循环(合理的无限证明)。更多细节见教程文件。