如何划分Coq代码以提供Coq ideslave(XML协议)?

如何划分Coq代码以提供Coq ideslave(XML协议)?,coq,coqide,Coq,Coqide,我认为Coq-ideslave(也称为Coq-XML协议)的“Add”调用一次需要一段代码,并按句点()进行划分。我仍然相信这在大多数情况下是正确的。比如说, Inductive or (A B:Prop) : Prop := | or_introl : A -> A \/ B | or_intror : B -> A \/ B where "A \/ B" := (or A B) : type_scope. 尽管这个代码块有几行,但它应该由一个“Add”调用输入,因为只

我认为Coq-ideslave(也称为Coq-XML协议)的“Add”调用一次需要一段代码,并按句点(
)进行划分。我仍然相信这在大多数情况下是正确的。比如说,

Inductive or (A B:Prop) : Prop :=
  | or_introl : A -> A \/ B
  | or_intror : B -> A \/ B

where "A \/ B" := (or A B) : type_scope.
尽管这个代码块有几行,但它应该由一个“Add”调用输入,因为只有最后一行有一个句点

但是,当项目符号(
+
-
*
{
}
)出现时,情况并非如此。比如说,

- intros [H _]; exact H.
应该通过两个“添加”调用输入,
-
介绍[H];精确H.
在另一种情况下

{ destruct Hl; [ right | destruct Fl | ]; assumption. }
应分为三部分输入,
{
自毁Hl;[right |自毁Fl |];假设。
}
。我在CoqIDE中观察到了这些行为,我认为它在内部使用了Coq ideslave

我的第一个问题:这些是将.v文件划分为块以使用“Add”调用的完整规则吗?如果没有,完整的规则是什么

第二个问题:如果我只使用“按时段划分”规则,比如说,如果我尝试将
{destruct Hl;[right | destruct Fl |];假设}
作为一个“Add”调用而不是三个,XML不会立即引发错误。但是,在几个验证步骤之后,它可能会引发一个错误(
此验证是聚焦的,但不能以这种方式取消聚焦
),该错误从未出现在Coq IDE中,并且我无法通过

<call val="Edit_at">
    <state_id val="..."/>
</call>

如果我试图撤销错误,coqxml会给出相同的错误消息。此错误是否与将项目符号作为一个块输入有关?如果是,为什么在我输入数据块后,coqxml不会对此抱怨

另外一个问题:我想在不久的将来尝试SerAPI。SerAPI是否共享相同的代码块填充规则


非常感谢你的帮助

Jim,事实上,拆分Coq命令是一项非常重要的任务,我要说的是,事实上的方法是CoqIDE使用的方法,请参见,还有,还有

对于协议的
Add
调用,您应该发送一句话!其余的都被忽略了,事实上,句子中确实包含了大括号。这就是你的问题的根源

SerAPI确实提供了额外的支持来帮助工具进行拆分。最重要的区别是:

  • 当您提交一个句子时,SerAPI将用实际的句尾位置进行回复。因此,您可以通过让SerAPI进行拆分来准确解析Coq文档
  • SerAPI可以一次性解析一个完整的Coq文档(并用拆分位置回复)

关于完整文档支持,还有一些技术细节,但最好在项目页面上加以说明。

谢谢!我试图通过
ocamlex coq_lex.mll
然后
ocamlc-c coq_lex.ml
编译CoqIDE的lexer。第一步成功了,但我在第二步遇到了一个错误:
文件“coq_lex.mll”,第48行,字符26-45:错误:未绑定的模块标签
,我认为这是一个投诉,
Tags.Script.comment
。我没有Ocaml方面的经验。您能告诉我
标签
模块在哪里,以及如何解决此错误吗?谢谢