我一直在为计算机科学中的定理证明创建一个Web IDE(WIDE)。你可能知道,有3个最常见的证据助理,分别是Athena,Isabelle和Coq。大多数计算机科学家可能会忘记他们的语法,范围等。我的Web IDE使用拖放设计和示例。您可以编辑和编写其他代码,您可以下载它,您可以共享它,您可以保存它等。它还有自己的解析器。到目前为止一切都还可以。小心!这是我的问题:当用户想要在我的Web IDE上运行他们的代码时,如何运行用户代码并获得结果(特别是对于Athena http://proofcentral.org/)。实际上,我可以通过mouse_event(user32)和其他pinvoke(平台调用)来做到这一点。我的程序通过Web将代码发送到正在运行的PC(不是服务器。因为服务器没有屏幕,所以程序不知道点击到哪里),然后PC得到代码。然后程序点击“emacs”图标。几秒钟后(用于打开和上传Athena的dll),该程序将Athena代码粘贴到emacs shell中。 Emacs运行该代码并返回结果。之后,程序选择,复制并将结果返回给Web IDE。然而,这是一种怪异而棘手的方式。我想做得最好。 感谢您的关注。最好
答案 0 :(得分:3)
我只能对 Isabelle :
给出部分答案Isabelle本身是在标准ML中实现的,但是为了与外部世界通信,它使用名为 PIDE (= Prover IDE )的协议。 PIDE的参考实现与Isabelle捆绑在一起并用Scala编写,因此它可以与任何JVM语言一起使用。 PIDE的主要应用是 Isabelle / jEdit ,它使用jEdit编辑器为Isabelle构建一个IDE,包括标记,连续检查,......
还有其他IDE,如Isabelle/Eclipse和Clide(基于网络)。对于您的使用案例,Clide似乎具有高度相关性。
如果您想了解有关PIDE内部工作原理的更多信息,可以参考Wenzel的相关文章,例如Asynchronous User Interaction and Tool Integration in Isabelle/PIDE和Isabelle as Document-oriented Proof Assistant。
现在,最后,无耻的插件:由于如何与Isabelle作为外部程序进行交互的问题不时出现,我已经将PIDE与一些额外的实用程序打包为libisabelle。它包含了与证明者进行非常简单的ping / pong交互的示例。