Type theory里的coinduction怎样理解( 二 )

Type theory里的coinduction怎样理解
都可能是无限类型,并且如果这两个类型是product,则它们的子类型也可以是无限类型 ,因此co-inductive可以包含无穷数据类型。
inductive type的范畴语义是自函子上的initial algebra,co-inductive的范畴语义是自函子上的terminal co-algebra。范畴这部分内容可以参考https://ncatlab.org/nlab/show/initial+algebra+of+an+endofunctor和https://ncatlab.org/nlab/show/terminal+coalgebra+for+an+endofunctor

如果是有限类型类型的话,关于其性质的证明就可以用前面的principle of induction,也就是归纳的方法;而对于无限类型的情况就要用principle of co-induction,因为我们不清楚它是怎么构造出来的,只能有观察的方法证明。
关于induction和co-induction还有更多的例子,比如对于自然数的generating function Type theory里的coinduction怎样理解
通过inductive定义得到的是自然数集合 Type theory里的coinduction怎样理解
,而co-inductive定义得到的是? Type theory里的coinduction怎样理解
;再比如list和co-list(也被称作stream),这两种结构都是用nil和cons表示,不过list是inductive定义的,就是长度有限的列表,而stream是co-induction方式定义的,就可以表示无限长度。(Haskell中因为默认惰性求值,最大不动点和最小不动点重合,于是list和stream就没有区分了)
关于包含无穷的自然数集合可以参考extended natural number in nLab
希望有所帮助。

■网友
Inductive就是符合类型递归式的最小类型。
Coinductive就是符合类型递归式的最大类型。
例如,同样写X = A * X。如果是inductive type的话,那么X是空集。如果是coinductive type的话 X = stream A。


推荐阅读