Emacs 无法设置具有依赖类型的认证编程

Emacs 无法设置具有依赖类型的认证编程,emacs,coq,proof-general,Emacs,Coq,Proof General,我正在使用《依赖类型认证编程》一书,但每次我都会发现不同的错误。在我看来,这个错误来自于从Proof General到本书源代码的makefile的编译过程之间的不匹配 如果我使用make编译源代码,并尝试运行实例Subset.v,那么通常我会得到: 错误:文件/home/usuario/Desktop/Coq/cpdt/src/cpdttractics.vo已被删除 坏魔术数字81100(预计8600)。它已损坏或已损坏 使用Coq的另一个版本编译 如果我使用makeclean清理makefi

我正在使用《依赖类型认证编程》一书,但每次我都会发现不同的错误。在我看来,这个错误来自于从Proof General到本书源代码的makefile的编译过程之间的不匹配

  • 如果我使用make编译源代码,并尝试运行实例Subset.v,那么通常我会得到:
  • 错误:文件/home/usuario/Desktop/Coq/cpdt/src/cpdttractics.vo已被删除 坏魔术数字81100(预计8600)。它已损坏或已损坏 使用Coq的另一个版本编译

  • 如果我使用makeclean清理makefile编译的文件,并尝试继续使用选项Coq->Auto Compilation->Compile before require,则该行为:
  • 需要提取

    这是失败的。最初它失败了,错误如下:

    错误:找不到库提取

    但通过上述选项,它可以提供如下信息:

    echo“需要提取”。>/tmp/ProofGeneral-coqpqpjtf0.v coqdep-Q/home/usuario/Desktop/Coq/cpdt/src/-R/home/usuario/Desktop/Coq/cpdt/src cpdt/tmp/ProofGeneral-coqpjtf0.v *警告:在文件/tmp/ProofGeneral-coqQPJTf0.v中,需要提取库,但在加载路径中未找到! *警告:在文件/tmp/ProofGeneral-coqQPJTf0.v中,需要提取库,但在加载路径中找不到库! /tmp/ProofGeneral-coqQPJTf0.vo/tmp/ProofGeneral-coqQPJTf0.glob/tmp/ProofGeneral-coqQPJTf0.v.美化:/tmp/ProofGeneral-coqQPJTf0.v /tmp/ProofGeneral-coqQPJTf0.vio:/tmp/ProofGeneral-coqQPJTf0.v


    如何解决这个问题?

    附带问题:您使用的是哪个操作系统?您是否依赖于
    opam

    关于您遇到的第一个错误,它肯定来自以下事实:

    • 在proofgeneral之外,
      coqc
      二进制对应Coq 8.11,而在proofgeneral中,
      coqtop
      二进制对应Coq 8.6。可能是因为
      PATH
      变量在两种上下文中不相同

    • 要确定找到了哪个二进制文件,可以在终端
      的哪个coqtop
      中以及在Emacs中,使用M-!哪一个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"))))
        
        然后关闭/重新打开处于危险中的
        …v
        文件(或者在已打开的
        …v
        缓冲区中执行M-x正常模式RET或C-x C-v RET)

    关于第二个错误,我有点困惑,
    Require Extraction
    触发了这个错误,因为这个库确实存在于Coq 8.6和8.11中

    乍一看,我建议用Coq 8.11重新测试自动编译,从Coq断言
    需要提取。
    (而不仅仅是
    需要提取。

    但PG的
    自动编译->在require
    之前编译功能中可能存在缺陷;无论如何,如果需要,请随时在PG tracker中打开相关问题,非常欢迎bug报告和功能请求: