什么是归纳谓词?

时间:2014-04-11 19:48:05

标签: predicate coq induction

您如何解释归纳谓词?它们用于什么?他们背后的理论是什么?它们只存在于依赖类型系统中,还存在于其他系统中?它们在某种程度上与GADT有关吗?为什么它们在Coq中默认为真?

这是Coq的一个例子:

Inductive even : nat -> Prop :=
| even0 : even 0
| evens : forall p:nat, even p -> even (S (S P))

你会如何使用这个定义?它是数据类型还是命题?

2 个答案:

答案 0 :(得分:3)

回答问题的另一部分。归纳谓词/定义不仅存在于依赖型系统中(例如,Isabelle / HOL也具有它们)。原则上它们更老,只是描述在某些给定的推理规则下关闭的最小谓词(或集)。这是否定义明确取决于规则。有足够的条件易于检查(例如,定义的谓词本身仅在规则的前提下正面发生)。然后Knaster-Tarski定理得到了期望的结果。

如果我没记错的话,Glynn Winskel撰写的编程语言的形式语义:简介一书介绍了数学基础。

答案 1 :(得分:2)

我认为我们将归纳谓词称为归纳定义的对象,并在Prop中进行排序。

它们用于归纳地定义属性(duh)。背后的理论可能可以在归纳结构的文献中找到。搜索有关CIC(感应结构的微积分)的论文。

它们与GADT有些相关,尽管它们具有依赖类型,但它们可以表达更多内容。如果我没有弄错的话,使用GADT,每个构造函数都存在于一个特定的族中,而依赖类型的添加允许构造函数根据其参数居住在不同的族中。

我不知道你的意思"默认情况下是真的"。

您定义的

even是一种归纳数据类型。它不是一个命题,正如类型nat -> Prop所表明的那样。命题为even 0even 1。它可以像even 0一样有人居住(可证明),也可以不像even 1那样有人居住。