Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从外部软件调用证明辅助Coq_Coq - Fatal编程技术网

如何从外部软件调用证明辅助Coq

如何从外部软件调用证明辅助Coq,coq,Coq,如何从外部软件调用校对助手Coq?Coq有一些API吗?Coq命令行界面是否足够丰富,可以在文件中传递参数并在文件中接收响应?我对java或C++桥感兴趣。 这是一个合理的问题。Coq不是通常的商业软件,人们可以从中期待开发人员友好的API。我对Isabelle/HOL也提出了类似的问题,这是一个合理的问题,答案也不平凡。命令行似乎是一条出路 Coq包括几个命令行工具,包括coqc编译器。这个程序将一个Coq理论文件作为输入,并尝试编译它。如果理论出了问题,该命令将失败,退出代码为非零,并将一些

如何从外部软件调用校对助手Coq?Coq有一些API吗?Coq命令行界面是否足够丰富,可以在文件中传递参数并在文件中接收响应?我对java或C++桥感兴趣。
这是一个合理的问题。Coq不是通常的商业软件,人们可以从中期待开发人员友好的API。我对Isabelle/HOL也提出了类似的问题,这是一个合理的问题,答案也不平凡。

命令行似乎是一条出路

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
$cat bad.v
引理0小于1:0<1。
$coqc-bad.v;回声$?
错误:有待定的证据
1.
好的
引理0小于1:0<1。
证明。
自动的。
Qed。
$coqc good.v;回声$?
0
以下是Coq命令行工具的文档,可以使用各种标志:


我知道有两种工具使用Coq作为辅助证明引擎:Frama-C和Why3。查看(方法
compile
check
)和的源代码,这些工具似乎也将Coq理论转储到一个文件中,然后调用Coq的命令行工具。据我所知,Coq没有更直接的API。

到今天为止,有三种与Coq交互的方式,从更多的努力到更少的力量:

  • ocamlapi:这就是Coq插件所做的,然而,ocamlapi的某些部分是出了名的难以掌握,通常需要高水平的专业知识。API也会从一个版本更改为另一个版本,使得维护变得困难。除了查看源代码之外,没有关于OCAMLAPI的正式文档,但是有相当多的教程具有不同程度的维护

  • XML协议:这是IDE使用的。它允许客户端执行基本的Coq文档操作,如检查文档的一部分、有限搜索、检索目标等

  • 命令行:作为其他回答细节,这基本上允许检查文件是否可以由Coq完全编译

  • 或者,有一个名为“SerAPI”(我是作者的免责声明)的实验协议,介于1和2之间。SerAPI是XML协议的扩展(但使用SEXPs),它试图提供1的一些优点以及更丰富的查询操作,而不存在与OCaml链接的缺点

    SerAPI目前处于一个非常实验的阶段,但是它可能对一些用户有用

    其他一些链接:


    我在这个问题上看到3票接近,说这个问题太广泛了。一、 我个人认为这是一个合理的问题。也许有人可以分享一些关于如何让问题变得更好的见解(如果你愿意的话,可以更专注),而不是马上结束问题?问题的框架似乎已经足够精确,可以从Coq开发人员那里得到信息丰富的答案。:-)但是,如果OP有一个特定的应用程序,人们可能会更有帮助。我的目的是从OpenCog中控制Coq,并将其用作形式推理组件(我试图在其中实现附加逻辑),以及OpenCog中可用的软推理和知识表示。但编程在这里根本不是问题。如果Coq在某种程度上是可以从外部获得的(而且它是——从答案中可以得到的),那么这是很好的。我能适应,没有问题。在我的计划中,以编程方式与Coq对话是最简单的问题。