后继者的计算行为

时间:2021-06-23 09:13:34

标签: coq

打印 S 答案:

Inductive nat : Set :=  O : nat | S : nat -> nat

计算 S(1) 返回:

= 2 : nat

S 的计算行为(执行加法)是如何定义的? 谢谢。

为了简化问题而添加的内容:

为什么 Compute S(1) 有效?必须在某处指定它与将 1 添加到 nat 数字相同。这种联系是如何建立的?

2 个答案:

答案 0 :(得分:2)

不完全确定你在问什么,所以如果这个答案看起来令人讨厌,请原谅我:你正在观察 S 的行为!

这是自然数的一元表示。计算 S n 意味着在 S 前面添加一个 n,仅此而已。

这项工作涉及在 nat 上定义函数,您可以在其中(递归地)说明如何处理所有这些 S(通过模式匹配)。

我希望有帮助,但也许你问的是不同的...

答案 1 :(得分:1)

你所说的计算行为是什么意思? S 是自然数的后继函数,即 +1 函数。

但是在 Coq 中,自然数 nat 被定义为归纳类型(您使用 Print S 得到的类型),它包含 0 并且通过 S 保持稳定。这是执行归纳等的很好的理论设置,这就是为什么这种表示是默认的。因此 Snat 定义的基本构造,例如加法就是根据它定义的。同样,数字只是漂亮的印刷:1 真的是 S 02S (S 0),等等。

这种一元表示效率低下,但这通常不是什么大问题,因为在证明中很少遇到大数。但是,如果您要寻找更高效的二进制表示,则可以使用标准库中的 N 类型。