在 Coq 中是否有必要将当前目录添加到加载路径以访问那里的已编译文件以进行导入或导出?

In Coq is it necessary to add the current directory to the load path to access compiled files there for imports or exports?

我最近从 Windows 切换到 Mac,现在 CoqIde 的行为与我习惯的不同。我正在使用 Coq 8.9.1,但我不记得我以前使用的版本,但它最后一次更新是在 2018 年秋季。

在我的旧机器上,我可以编译一个文件(例如 file1.v 以获得 file1.vo 和 file1.glob),然后将其导入或导出到同一目录中的另一个文件中(例如写 Require Export file1.)而不改变加载路径。现在我必须明确地将当前目录添加到加载路径,否则我会得到 "Unable to locate library ..." 错误。

这是预期的行为吗?我已经离开 Coq 一段时间了,但我很确定我以前不必这样做。将当前目录添加到加载路径不在我的任何旧工作中。有没有办法让当前目录始终在加载路径中?

我阅读了 this 问题和答案,但那里的建议看起来都归结为将我正在处理的任何目录添加到加载路径(在我正在处理的文件中)或其他地方)。

更新:

我能够在文件所在的位置获得从终端打开的解决方案(导致当前文件的路径在 LoadPath 中),但它比我习惯的更让人头疼Windows.

我不得不在 ~/bin/coqide 中编写一个小的 Bash 脚本,它只调用 /Applications/CoqIDE_8.8.0/Contents/MacOS/coqide。在我的家庭用户的二进制文件目录中添加符号 link 找不到它期望相对于调用符号 link 的位置的文件。

我无法使用 _CoqProject 文件获得第二个解决方案以在 CoqIde 中工作,并最终看到一些奇怪的行为。使用 coqc 从终端编译有效。

我已将此添加到 Coq GitHub 问题跟踪器(参见 here and here)。

当您使用 CoqIDE 打开一个文件时,它不会找到您所依赖的相对于您打开的文件位置的其他文件,而是相对于您打开 CoqIDE 的位置(另请参阅 https://github.com/coq/coq/issues/5124 ).

因此,一种可能的解决方案是我在上面的评论中提到的解决方案(从文件所在的控制台打开 CoqIDE)。但幸运的是,当您正在处理一个包含多个文件的项目时,我会推荐另一种解决方案,它的优点是允许您随心所欲地打开 CoqIDE:它是使用 _CoqProject 文件。

因此,只要在 Coq 文件所在的位置创建一个 _CoqProject 文件,只需使用以下行:

-R . MyProjectNamespace

然后一切都应该神奇地工作(前提是您重新编译所有文件)。