如何从外部软件调用校对助理Coq? Coq有一些API吗? Coq命令行界面是否足够丰富以传递文件中的参数并在文件中接收响应?我对Java或C ++桥感兴趣。
这是合法的问题。 Coq不是通常的商业软件,人们可以期待开发人员友好的API。我对Isabelle / HOL有类似的问题,这是一个非常简单的答案的合法问题。
答案 0 :(得分:9)
截至今天,有三种与Coq互动的方式,从更多努力到更低权力的排序:
OCaml API:这是Coq插件的功能,但是,OCaml API的某些部分非常难以掌握,通常需要高专业知识。 API也从一个版本更改为另一个版本,从而使维护变得困难。除了查看源代码之外,没有OCaml API的官方文档,但是有很多具有不同维护程度的教程正在浮动。
XML协议:这是IDE使用的。它允许客户端执行基本的Coq文档操作,例如检查其中的一部分,有限的搜索,检索目标等... official documentation
命令行:正如其他答案详细说明,这基本上可以检查Coq是否可以完全编译文件。
或者,有一个名为" SerAPI"的实验方案。 [免责声明我是作者]位于1和2之间.SerAPI是XML协议的扩展(但使用SEXP),它试图提供1的一些优点以及更丰富的查询操作,而没有与OCaml链接的缺点。 / p>
SerAPI目前处于非常实验阶段,但它可能对某些用户有用。 webpage
其他一些链接:
答案 1 :(得分:2)
命令行似乎是要走的路。
Coq包括几个命令行工具,包括coqc
编译器。该程序将Coq理论文件作为输入并尝试编译它。如果理论出现问题,命令将以非零退出代码失败并将一些反馈写入其输出流。如果一切正常,则命令(通常)是静默的,退出时退出零代码,并写入包含已编译理论的.vo
文件。
例如:
$ cat bad.v
Lemma zero_less_than_one: 0 < 1.
$ coqc bad.v ; echo $?
Error: There are pending proofs
1
$ cat good.v
Lemma zero_less_than_one: 0 < 1.
Proof.
auto.
Qed.
$ coqc good.v ; echo $?
0
以下是Coq命令行工具的文档,可以采用各种标志: https://coq.inria.fr/refman/practical-tools/coq-commands.html
我知道有两个工具使用Coq作为从属证明引擎:Frama-C和Why3。查看https://github.com/Frama-C/Frama-C-snapshot/blob/master/src/plugins/wp/ProverCoq.ml(方法compile
和check
)和https://github.com/AdaCore/why3/tree/master/drivers处的来源,这些工具似乎也将Coq理论转储到文件中,然后调用Coq&#39;的命令行工具。据我所知,Coq没有更多的直接API。