Coq中的构造函数是什么?
我无法理解构造函数的原理及其工作原理。
例如,在Coq中,我们被教导如下定义自然数:
Inductive nat : Type :=
| O : nat
| S : nat -> nat.
并且被告知S
是一个构造函数,但究竟是什么意思呢?
如果我那么做:
Check (S (S (S (S O)))).
我知道它是4
和类型nat
。
这是如何工作的,Coq如何知道(S (S (S (S O))))
代表4
?
我想这个问题的答案是Coq中一些非常聪明的背景魔法。
没有找到相关结果
已邀请:
2 个回复
宦哨抹存胳
说以下事情:
是
的类型 当
是
的类型时,
是
的类型。 应用
或
是创造自然的唯一两种方法。当给予任意自然时,你知道它是由一个或另一个制成的。 两个术语
和
类型
是相等的,当且仅当它们都是
或者它们分别是
和
且
等于
。 您可以看到这些规则如何推广到任意归纳类型定义。通常,在
类型的任意归纳类型定义中: 将构造函数应用于正确类型的参数会产生类型为
的术语; 任何类型
的术语是应用其中一个与
类型相关的构造函数的结果;换句话说,给定一个类型为
的词,可以假设它是应用
的一个构造函数的结果; 类型
的两个术语只有在将相同的构造函数应用于相同的参数时才会相等。 (旁注:当类型定义适用于
和
形状的构造函数时,这些属性或多或少完全符合Peano的自然数公理。这就是为什么名为
的类型在Coq中预先定义了这些形状的构造函数用于表示自然数字。这种类型接受特殊处理,因为它很快就会很难以操纵原始形式,但特殊处理只是为了方便。)
凄挡