打印 ssrnat 的“.+1”定义

Printing ssrnat's ".+1" definition

在 Ilya Sergey 的程序和证明中,引入了ssrnat的命令.+1,用于定义自然数上的一些函数。虽然它的用法在那里得到了很好的解释,但我也对它是如何定义的很感兴趣,更重要的是,它是如何工作的。在那一章的前面介绍了 nat 类型,我们可以用“Print nat.”验证定义,它产生:

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

然而,对于 .+1,命令“Print .+1.”或“Print +1.”会产生:

Syntax error: 'Fields' or 'Rings' or 'Hint' 'View' expected after 'Print' (in [command]).

甚至试图通过在它前面添加一个自然数来规避它,例如在“Definition one: nat := 1.”后面加上“Print one.+1.”会产生:

Syntax error: '.' expected after [command] (in [vernac_aux]).

但是,我想这个命令是在库中定义的,而不是语言的原语,所以感觉应该能够像检查其他任何命令一样检查它的定义。

如果是这样,为什么命令不起作用?如何打印 .+1 的定义?

注意:如果这是不可能的,解释为什么也可以作为答案(以及命令的 code/workings 的资源表示赞赏)。

要打印诸如 .+1 之类的符号,您必须使用引号。

Print ".+1".

如果你这样做,你最终会得到与 Print nat. 相同的结果,因为当你打印归纳类型的构造函数时会发生这种情况。事实上,你会得到 Print S. 的结果,因为 .+1 是它的一个符号。

对于符号,通常你想使用 Locate:

Locate ".+1'.

这次输出的信息更丰富:

Notation
"n .+1" := S n : nat_scope (default interpretation)

符号,与定义不同。这只是一种编写和打印表达式的方法,但它的底层是相同的。

澄清一下,.+1 是一个 符号 ,而不是 命令 。命令是 DefinitionPrint 等。 如果您想了解更多信息,我鼓励您查看文档。