归纳定义产生“忽略递归调用”

时间:2016-06-02 07:24:06

标签: coq

我有一个归纳定义 - 在评估后 - 打印警告“忽略递归调用”。似乎这个定义完全正常。但是,我仍然很好奇为什么会给出这个警告。以下是一个最小的例子。

Inductive testor :=
| Constr1 : list testor -> testor
| Constr2 : testor -> testor.

我认为第一个构造函数中的罪魁祸首是list testor。另一方面,如果没有第二个构造函数,则不会发出警告。

:为什么会发出警告?这是否意味着对归纳定义施加限制?

我正在使用Coq 8.5。

1 个答案:

答案 0 :(得分:4)

由于testor的出现,类型list testor被称为嵌套归纳类型。没有限制,你可以安全地使用这个定义,它只是自动生成的归纳原理并不是很有用。此Coq-club thread处理此问题。以下是Adam Chlipala的回答摘录:

  

警告只是关于生成有用的启发式尝试   归纳原理。嵌套归纳类型(如[AllList]使用   这里需要一些聪明才能构建正确的归纳案例模式。

有关详细信息,请参阅CPDT this chapter中的“嵌套归纳类型”部分。