打印 S 答案:
Inductive nat : Set := O : nat | S : nat -> nat
计算 S(1) 返回:
= 2 : nat
S 的计算行为(执行加法)是如何定义的? 谢谢。
为了简化问题而添加的内容:
为什么 Compute S(1)
有效?必须在某处指定它与将 1 添加到 nat 数字相同。这种联系是如何建立的?
答案 0 :(得分:2)
不完全确定你在问什么,所以如果这个答案看起来令人讨厌,请原谅我:你正在观察 S 的行为!
这是自然数的一元表示。计算 S n
意味着在 S
前面添加一个 n
,仅此而已。
这项工作涉及在 nat
上定义函数,您可以在其中(递归地)说明如何处理所有这些 S
(通过模式匹配)。
我希望有帮助,但也许你问的是不同的...
答案 1 :(得分:1)
你所说的计算行为是什么意思? S
是自然数的后继函数,即 +1
函数。
但是在 Coq 中,自然数 nat
被定义为归纳类型(您使用 Print S
得到的类型),它包含 0
并且通过 S
保持稳定。这是执行归纳等的很好的理论设置,这就是为什么这种表示是默认的。因此 S
是 nat
定义的基本构造,例如加法就是根据它定义的。同样,数字只是漂亮的印刷:1
真的是 S 0
,2
是 S (S 0)
,等等。
这种一元表示效率低下,但这通常不是什么大问题,因为在证明中很少遇到大数。但是,如果您要寻找更高效的二进制表示,则可以使用标准库中的 N
类型。