Coq XML协议:可能是PrintAST故障

时间:2017-12-09 22:48:41

标签: xml coq coq-tactic coqide coq-extraction

我正在使用Coq 8.6.1中的XML协议。当我尝试PrintAst调用时,我没有获得AST,但得到了一个" todo"代替。这是故障还是我做错了什么?我应该如何从打印AST调用中获取AST?

这是我的情况: 我使用coqtop -toploop coqidetop -main-channel stdfds打开了一个ideslave进程,然后从coq-8.6.1/theories/FSets/FSetCompat.v输入Coq代码。

在这里,我使用"<<<<<<<<"如果你想重复我的实验,请附上一些详细的程序。

<<<<<<<<<<<<<<<<<<<<<<<&LT ;<<<<<<<<<<<<<<<<<<<<

首先,我输入

<call val="Add"><pair><pair><string>(***********************************************************************)
(*  v      *   The Coq Proof Assistant  /  The Coq Development Team    *)
(* &lt;O___,, *        INRIA-Rocquencourt  &amp;  LRI-CNRS-Orsay              *)
(*   \VV/  *************************************************************)
(*    //   *      This file is distributed under the terms of the      *)
(*         *       GNU Lesser General Public License Version 2.1       *)
(***********************************************************************)

(** * Compatibility functors between FSetInterface and MSetInterface. *)

Require Import FSetInterface FSetFacts MSetInterface MSetFacts.
</string><int>1</int></pair><pair><state_id val="1"/><bool val="true"/></pair></pair></call>

然后

<call val="Add"><pair><pair><string>Set Implicit Arguments.
</string><int>1</int></pair><pair><state_id val="2"/><bool val="true"/></pair></pair></call>

然后

<call val="Add"><pair><pair><string>Unset Strict Implicit.
</string><int>1</int></pair><pair><state_id val="3"/><bool val="true"/></pair></pair></call>

最后

<call val="Add"><pair><pair><string>
(** * From new Weak Sets to old ones *)

Module Backport_WSets
 (E:DecidableType.DecidableType)
 (M:MSetInterface.WSets with Definition E.t := E.t
                        with Definition E.eq := E.eq)
 &lt;: FSetInterface.WSfun E.
</string><int>1</int></pair><pair><state_id val="4"/><bool val="true"/></pair></pair></call>

&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT ;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT;

此时,我打电话给<call val="PrintAst"><state_id val="5"/></call>,我希望返回

的AST
Module Backport_WSets
 (E:DecidableType.DecidableType)
 (M:MSetInterface.WSets with Definition E.t := E.t
                        with Definition E.eq := E.eq)
 &lt;: FSetInterface.WSfun E.

令我失望的是,我得到了

<value val="good"><gallina begin="42" end="228"><todo begin="42" end="228">Module&nbsp;Backport_WSets&nbsp;(E:&nbsp;DecidableType.DecidableType)
&nbsp;&nbsp;(M:&nbsp;MSetInterface.WSets&nbsp;with&nbsp;Definition&nbsp;E.t&nbsp;:=&nbsp;E.t&nbsp;with&nbsp;Definition
&nbsp;&nbsp;&nbsp;E.eq&nbsp;:=&nbsp;E.eq)&lt;:&nbsp;FSetInterface.WSfun&nbsp;E.</todo></gallina></value>

通过漂亮的打印是

<value val="good">
    <gallina begin="42" end="228">
        <todo begin="42" end="228">Module Backport_WSets (E: DecidableType.DecidableType)
  (M: MSetInterface.WSets with Definition E.t := E.t with Definition
   E.eq := E.eq)<: FSetInterface.WSfun E.</todo>
    </gallina>
</value>

但这仅仅是代码的副本!它甚至没有应用词法分析器......为什么会发生这种情况?有人可以帮忙吗?非常感谢你!

1 个答案:

答案 0 :(得分:2)

bar_plot <- function(.dt, .tit="U.S. Personal Income Distribution by Quartile", .sub = NULL, .xl = "Income Quartiles", .yl = "Mean Income", ...){ ggplot(data =.dt) + geom_col(mapping = aes(y = list(1st, 2nd, 3rd, 4th)), stat = identity) + labs(title = .tit, subtitle = .sub) } gr1 <- bar_plot(.dt = t1, .sub = "pop subgroup name") 来电从未完成,并且已在较新的Coq版本中删除。

如果您需要Coq数据的结构化表示,我建议使用基于自动序列化的Coq SerAPI。 [免责声明:我是作者]

编辑:如何在SerAPI中执行此操作:

print_ast

从AST中删除位置信息后产生[非常详细]:

echo '
(Add () "From Coq Require Import FSetInterface FSetFacts MSetInterface MSetFacts.

(** * From new Weak Sets to old ones *)

Module Backport_WSets
 (E:DecidableType.DecidableType)
 (M:MSetInterface.WSets with Definition E.t := E.t
                        with Definition E.eq := E.eq)
 <: FSetInterface.WSfun E.")
(Query () (Ast 3))
' | ./sertop.native --printer=human

更重要的是,Coq和SerAPI现在提供了一个通用的映射系统,从AST到输入缓冲区位置。