如何從外部軟件呼叫證明助手Coq? Coq是否有一些API? Coq命令行界面是否足夠豐富,可以在文件中傳遞參數並在文件中接收響應?我對Java或C++橋樑感興趣。如何從外部軟件呼叫proof asistant Coq
這是一個合法的問題。 Coq不是通常的商業軟件,人們可以期望開發者友好的API。對於Isabelle/HOL我有類似的問題,這是一個非常重要的問題。
如何從外部軟件呼叫證明助手Coq? Coq是否有一些API? Coq命令行界面是否足夠豐富,可以在文件中傳遞參數並在文件中接收響應?我對Java或C++橋樑感興趣。如何從外部軟件呼叫proof asistant Coq
這是一個合法的問題。 Coq不是通常的商業軟件,人們可以期望開發者友好的API。對於Isabelle/HOL我有類似的問題,這是一個非常重要的問題。
截至今天,有三種方式與勒柯克,從更多的努力責令較少的電力進行交互:
使用OCaml的API:這是什麼勒柯克插件做的,但是,有些部位衆所周知,OCaml API難以掌握,通常需要很高的專業知識。 API也從一個版本變爲另一個版本,這使得維護變得困難。除了查看源代碼外,OCaml API還沒有官方文檔,但有不少程度不同的維護教程正在浮動。
使用XML協議:這是IDE使用的。它允許客戶端執行基本的Coq文檔操作,例如檢查它的一部分,限制搜索,檢索目標等等。official documentation
使用命令行:作爲其他答案的細節,這基本上允許檢查是否可以由Coq完全編譯文件。
可選擇地,有一個被稱爲「SerAPI」 [聲明我提交]爲處於1個2之間SerAPI是XML協議的擴展(但使用SEXPs)實驗方案,試圖提供一些1的優點以及更豐富的查詢操作,沒有與OCaml鏈接的缺點。
SerAPI目前處於非常實驗階段,但它可能對某些用戶有用。webpage
一些額外的鏈接:
命令行似乎是要走的路。
Coq包含幾個命令行工具,包括coqc
編譯器。這個程序將一個Coq理論文件作爲輸入並嘗試編譯它。如果理論出了問題,命令會失敗,並返回一個非零的退出代碼,並在輸出流中寫入一些反饋。如果一切正常,該命令(通常)是無聲的,以零退出代碼退出,並寫入一個包含編譯理論的文件。
例如:
$ 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
這裏是勒柯克的命令行工具的文檔,可以採取各種標誌:https://coq.inria.fr/distrib/current/refman/Reference-Manual016.html
我知道使用勒柯克爲下級證明發動機兩種工具: 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的命令行工具。據我所知,Coq沒有更直接的API。
我看到在這個問題上接近3票,說這個問題太寬泛。我個人認爲這是一個合理的問題。也許有人可以分享一些關於如何更好地提出問題的見解(如果您願意,可以更專注),而不是馬上關閉它? –
問題的框架已經足夠精確,可以從Coq開發人員那裏獲得豐富的答案。 :-)但是,如果OP有一個特定的應用程序,也許人們可以更有幫助。 –
我的意圖是通過https://github.com/opencog控制Coq,並將其用作OpenCog中可用的軟推理和知識表示形式的正式推理組件(我試圖在其中實現其他邏輯)。但編程在這裏根本不是問題。如果Coq從某種程度上可用(而且它可以從答案中得到),那麼這很好。我可以適應,沒有問題。以編程方式與Coq交談是我計劃中最簡單的問題。 – TomR