您如何解释归纳谓词?它们用于什么?他们背后的理论是什么?它们只存在于依赖类型系统中,还存在于其他系统中?它们在某种程度上与GADT有关吗?为什么它们在Coq中默认为真?
这是Coq的一个例子:
Inductive even : nat -> Prop :=
| even0 : even 0
| evens : forall p:nat, even p -> even (S (S P))
你会如何使用这个定义?它是数据类型还是命题?
答案 0 :(得分:3)
回答问题的另一部分。归纳谓词/定义不仅存在于依赖型系统中(例如,Isabelle / HOL也具有它们)。原则上它们更老,只是描述在某些给定的推理规则下关闭的最小谓词(或集)。这是否定义明确取决于规则。有足够的条件易于检查(例如,定义的谓词本身仅在规则的前提下正面发生)。然后Knaster-Tarski定理得到了期望的结果。
如果我没记错的话,Glynn Winskel撰写的编程语言的形式语义:简介一书介绍了数学基础。
答案 1 :(得分:2)
我认为我们将归纳谓词称为归纳定义的对象,并在Prop
中进行排序。
它们用于归纳地定义属性(duh)。背后的理论可能可以在归纳结构的文献中找到。搜索有关CIC(感应结构的微积分)的论文。
它们与GADT有些相关,尽管它们具有依赖类型,但它们可以表达更多内容。如果我没有弄错的话,使用GADT,每个构造函数都存在于一个特定的族中,而依赖类型的添加允许构造函数根据其参数居住在不同的族中。
我不知道你的意思"默认情况下是真的"。
您定义的 even
是一种归纳数据类型。它不是一个命题,正如类型nat -> Prop
所表明的那样。命题为even 0
或even 1
。它可以像even 0
一样有人居住(可证明),也可以不像even 1
那样有人居住。