你如何有效地查找在 Coq 中定义标识符的位置?

How do you look up where identifiers are defined in Coq efficiently?

在大多数 IDE 或文本编辑器中,您可以右键单击一个术语,它会将您带到定义该术语的文件。 CoqIDE 似乎没有那个,所以我一直在做 coqdoc myfile.v --html,然后转到生成的 HTML 文档。但该文件中唯一可点击的术语是针对 Coq 标准库的。 ssreflect 定义的术语(例如)不可点击。

是否有一种标准方法可以快速查找在 Coq 文件中定义 term/identifier 的地方(及其源代码)?在 CoqIDE 或 emacs + ProofGeneral 中(我正在使用 CoqIDE,但如果 emacs/ProofGeneral 具有此功能,我会切换)。

或者是为您使用的每个 Coq 项目和依赖项生成文档的标准方法?

如果您突出显示一个术语,然后执行查询 -> 定位,或者您计算 Locate some_identifier.,您将获得常量的全名。如果您知道依赖项的安装位置,这将告诉您在哪里查找标识符。

编辑:如果你想要标识符的定义,你可以Print它。如果你只想要它的类型,你可以使用 About,或 Check(它也接受表达式,而不仅仅是标识符)。

有一个工具在 Proof General 之上运行,称为 company-coq。默认情况下,它具有跳转到定义功能绑定到 M-. 键盘快捷键。

仅当Require命令或其变体需要包含定义的模块时,它才能跳转到光标下的定义(甚至跳转到标准库)。