打印 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
是一个 符号 ,而不是 命令 。命令是 Definition
、Print
等。
如果您想了解更多信息,我鼓励您查看文档。
在 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
是一个 符号 ,而不是 命令 。命令是 Definition
、Print
等。
如果您想了解更多信息,我鼓励您查看文档。