什么是感应感应?


11

什么是感应感应

我发现的资源是:

前两个参考资料对我来说太简短了,后两个参考文献太技术性了。有人能用外行的术语解释吗?如果有Agda代码,那就更好了。


您的第四次引用中有Agda代码。
吉尔(Gilles)'所以

当然可以,但是要阅读那么多的代码将非常困难。而且(我想)仅通过查看1或2个示例就可以轻松完成。
盛安安

Answers:


13

补充资料2016-10-03:我混合了归纳-归纳和归纳-递归(这不是我第一次这样做!)。我为这个烂摊子道歉。我更新了答案以涵盖这两个方面。

我在Forsberg&Setzer的论文《归纳-归纳定义的有限公理化》中找到了解释。

归纳递归

归纳递归定义是一种定义A类型和一个ŤÿpË类类型的类A T y p e以一种特殊的方式同时定义:

  1. 一个被定义为归纳类型。
  2. 通过对一个的递归来定义。
  3. 重要的是,定义一个可以使用

如果没有第三个要求,我们可以先定义一个,然后分别

这是一个婴儿的例子。归纳定义一个具有以下构造函数:

  • 一个一个
  • X一个X一个

类型的定义为

  • 一个=bØØ
  • XF=ñ一个Ť

那么,一个什么?首先我们有一个元素

一个一个
因此,存在类型一个定义为bØØ。因此,我们可以形成两个新元素
一个F一个sË
一个Ť[RüË
一个。现在我们有一个F一个sË=一个Ť[RüË=ñ一个Ť,因此我们也可以为每个ññ一个Ť形成元素
一个F一个sËñ一个
一个Ť[RüËñ一个
我们可以继续这样下去。下一阶段将是由于
一个Ť[RüËñ=ñ一个Ť
ñ一个Ť都有一个元素
一个Ť[RüËñ一个
和元素
一个F一个sËñ一个
我们可以继续。一点点思考表明,一个或多或少是自然数列表的两个副本,共享一个公共的空列表。我将其作为练习找出原因。

感应感应

归纳-归纳定义还定义了类型一个,同时定义了类型一个ŤÿpË

  1. 一个归纳定义
  2. 是归纳定义的,它可以引用一个
  3. 至关重要的是, 一个可指

重要的是要了解归纳递归和归纳感应之间的区别。在归纳递归中,我们通过提供形式为B c= ⋯的方程来定义, 其中cA的构造函数。在感应感应定义我们定义通过用于形成的元件提供构造

C=
C一个

让我们将前面的例子重新表述为感应归纳法。首先,我们有归纳式tpye 一个

  • 一个一个
  • X一个X一个

系列类型由以下构造函数定义:

  • Ť[Rü一个
  • F一个一个
  • 如果X一个ÿXžË[RXÿ
  • 如果X一个ÿXžXÿ那么小号üCžXÿ

如您所见,我们给出了生成元素的规则,这些规则等于说一个是布尔(等价)布尔,而Xÿ是(同构)自然数。


为什么有人会定义这样的数据类型D:
盛安安

7
为了教什么是感应-感应类型。我可以举一个真实的例子,即类型Universe,但这会造成混淆。
Andrej Bauer

3
@AndrejBauer在我看来,这更像是归纳递归。归纳-归纳是将类型族定义为归纳类型
gallais 16-10-3

2
糟糕,您绝对正确。我会解决的。
安德烈·鲍尔

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.