无法设置具有依赖类型的认证编程
Unable to set up Certified Programming with Dependent Types
我正在使用 Certified Programming with Dependent Types 这本书,但每次我都会发现不同的错误。在我看来,错误是由于 Proof General 的编译过程与本书来源的 makefile 之间的不匹配造成的。
- 如果我用 make 编译源代码并尝试 运行 例如 Subset.v 在 Proof-General 我得到:
Error: File /home/usuario/Desktop/Coq/cpdt/src/CpdtTactics.vo has
bad magic number 81100 (expected 8600). It is corrupted or was
compiled with another version of Coq.
- 如果我使用 make clean 清理 makefile 编译文件并尝试继续选项 Coq -> Auto Compilation -> Compile before require 那么它是行:
需要提取。
失败了。最初它因错误而失败:
Error: Unable to locate library Extraction.
但是使用上面的选项启用它会给出类似的东西:
echo "Require Extraction." > /tmp/ProofGeneral-coqQPJTf0.v coqdep -Q /home/usuario/Desktop/Coq/cpdt/src/ -R /home/usuario/Desktop/Coq/cpdt/src Cpdt /tmp/ProofGeneral-coqQPJTf0.v
* Warning: in file /tmp/ProofGeneral-coqQPJTf0.v, library Extraction is required and has not been found in the loadpath!
* Warning: in file /tmp/ProofGeneral-coqQPJTf0.v, library Extraction is required and has not been found in the loadpath!
/tmp/ProofGeneral-coqQPJTf0.vo /tmp/ProofGeneral-coqQPJTf0.glob /tmp/ProofGeneral-coqQPJTf0.v.beautified: /tmp/ProofGeneral-coqQPJTf0.v
/tmp/ProofGeneral-coqQPJTf0.vio: /tmp/ProofGeneral-coqQPJTf0.v
我该如何解决这个问题?
附带问题:您正在使用哪个 OS?你靠opam
吗?
关于您得到的第一个错误,它肯定来自以下事实:
在 proofgeneral 之外,coqc
二进制对应于 Coq 8.11,而在 ProofGeneral 中,coqtop
二进制对应于 Coq 8.6。可能是因为 PATH
变量在两个上下文中不相同。
要确定找到了哪个二进制文件,您可以在终端 which coqtop
中执行,在 Emacs 中,M-! which coqtop RET 你应该得到不同的路径。
有时,直接从终端 (emacs &
) 打开 emacs
可以帮助解决此类问题。
但是如果您想更改 ProofGeneral 中使用的 coqtop
二进制文件,您可以使用以下步骤之一设置 coq-prog-name
选项:
以交互方式,键入 C-u C-c C-x(杀死 Coq),M-: (setq coq-prog-name ".../ coqtop") 和 C-c C-n
或者在项目根目录中创建一个 .dir-locals.el
文件(Emacs 的标准配置文件),其中包含:
((coq-mode . ((coq-prog-name . "…/coqtop"))))
和 close/reopen ….v
文件处于危险之中(或者只执行 M-x 正常模式 RET 或 C-x C-v RET 在已经打开的 ….v
缓冲区中)
关于你得到的第二个错误,我有点困惑 Require Extraction
触发了这个错误,因为这个库确实存在于 Coq 8.6 和 8.11 中。
乍一看,我建议用 Coq 8.11 重新测试自动编译,断言 From Coq Require Extraction.
(而不仅仅是 Require Extraction.
)
不过PG的Auto Compilation -> Compile before require
功能可能有bug;无论如何,如果需要,请随时在 PG 跟踪器中打开相关问题,非常欢迎错误报告和功能请求:https://github.com/ProofGeneral/PG/issues
我正在使用 Certified Programming with Dependent Types 这本书,但每次我都会发现不同的错误。在我看来,错误是由于 Proof General 的编译过程与本书来源的 makefile 之间的不匹配造成的。
- 如果我用 make 编译源代码并尝试 运行 例如 Subset.v 在 Proof-General 我得到:
Error: File /home/usuario/Desktop/Coq/cpdt/src/CpdtTactics.vo has bad magic number 81100 (expected 8600). It is corrupted or was compiled with another version of Coq.
- 如果我使用 make clean 清理 makefile 编译文件并尝试继续选项 Coq -> Auto Compilation -> Compile before require 那么它是行:
需要提取。
失败了。最初它因错误而失败:
Error: Unable to locate library Extraction.
但是使用上面的选项启用它会给出类似的东西:
echo "Require Extraction." > /tmp/ProofGeneral-coqQPJTf0.v coqdep -Q /home/usuario/Desktop/Coq/cpdt/src/ -R /home/usuario/Desktop/Coq/cpdt/src Cpdt /tmp/ProofGeneral-coqQPJTf0.v * Warning: in file /tmp/ProofGeneral-coqQPJTf0.v, library Extraction is required and has not been found in the loadpath! * Warning: in file /tmp/ProofGeneral-coqQPJTf0.v, library Extraction is required and has not been found in the loadpath! /tmp/ProofGeneral-coqQPJTf0.vo /tmp/ProofGeneral-coqQPJTf0.glob /tmp/ProofGeneral-coqQPJTf0.v.beautified: /tmp/ProofGeneral-coqQPJTf0.v /tmp/ProofGeneral-coqQPJTf0.vio: /tmp/ProofGeneral-coqQPJTf0.v
我该如何解决这个问题?
附带问题:您正在使用哪个 OS?你靠opam
吗?
关于您得到的第一个错误,它肯定来自以下事实:
在 proofgeneral 之外,
coqc
二进制对应于 Coq 8.11,而在 ProofGeneral 中,coqtop
二进制对应于 Coq 8.6。可能是因为PATH
变量在两个上下文中不相同。要确定找到了哪个二进制文件,您可以在终端
which coqtop
中执行,在 Emacs 中,M-! which coqtop RET 你应该得到不同的路径。有时,直接从终端 (
emacs &
) 打开emacs
可以帮助解决此类问题。但是如果您想更改 ProofGeneral 中使用的
coqtop
二进制文件,您可以使用以下步骤之一设置coq-prog-name
选项:以交互方式,键入 C-u C-c C-x(杀死 Coq),M-: (setq coq-prog-name ".../ coqtop") 和 C-c C-n
或者在项目根目录中创建一个
.dir-locals.el
文件(Emacs 的标准配置文件),其中包含:((coq-mode . ((coq-prog-name . "…/coqtop"))))
和 close/reopen
….v
文件处于危险之中(或者只执行 M-x 正常模式 RET 或 C-x C-v RET 在已经打开的….v
缓冲区中)
关于你得到的第二个错误,我有点困惑 Require Extraction
触发了这个错误,因为这个库确实存在于 Coq 8.6 和 8.11 中。
乍一看,我建议用 Coq 8.11 重新测试自动编译,断言 From Coq Require Extraction.
(而不仅仅是 Require Extraction.
)
不过PG的Auto Compilation -> Compile before require
功能可能有bug;无论如何,如果需要,请随时在 PG 跟踪器中打开相关问题,非常欢迎错误报告和功能请求:https://github.com/ProofGeneral/PG/issues