我看着IndProp,发现:
Fail Inductive wrong_ev (n : nat) : Prop :=
| wrong_ev_0 : wrong_ev 0
| wrong_ev_SS : ∀ n, wrong_ev n → wrong_ev (S (S n)).
(* ===> Error: A parameter of an inductive type n is not
allowed to be used as a bound variable in the type
of its constructor. *)
区别在于它看起来好像在接受参数一样,但是似乎抛出错误。为什么会这样?
文字提供了一些解释,但我不理解:
我不明白的是什么。我不明白的部分是它说的部分:
允许在类型中使用不同的值
为什么说“类型”?类型不是输入,值是输入。为什么这样说呢?似乎极为混乱。我(非常模糊地)知道存在诸如“依赖类型”之类的东西,但是它也指的是什么?难道不是争论吗?构造函数不取值或“东西”并返回某种类型的对象吗?
为什么归纳类型的签名(实际上我只是将其视为构建事物的函数是某种类型的返回对象)却缺少自变量?
更多文字内容似乎会出现解释:
此定义在一个关键方面与以前的归纳用法不同:它的结果不是Type,而是从nat到Prop的函数-即数字的属性。请注意,我们已经看到了其他归纳定义,这些归纳定义会生成函数,例如list,其类型为Type→Type。此处的新功能是,由于ev的nat参数未命名,在冒号的右侧,因此可以在不同构造函数的类型中采用不同的值:ev_0和S(S n)的类型为0。 ev_SS的类型。 相反,列表的定义在冒号的左侧全局命名X参数,从而强制nil和cons的结果相同(列表X)。如果我们尝试在定义ev时将nat移到左侧,我们将看到一个错误...我们可以将ev的定义视为定义Coq属性ev:nat→Prop以及原始定理ev_0:ev 0和ev_SS:∀n,ev n→ev(S(S n))。 这样的“构造定理”与已证明的定理具有相同的地位。
答案 0 :(得分:0)
为什么说“类型”?类型不是输入,值是
您需要阅读整个表达式:“使用不同的构造函数的类型”。 而且,的确,两个构造函数的返回类型的自然数是不同的:
ev_0
的值为0 S (S n)
的{{1}}