智能修改Coq环境

时间:2017-03-17 20:09:10

标签: coq ltac

Ltac用于automating proofs and modifying proof environmentoutputting stringsdefining complex notations。它还能用于" smart"修改Coq环境?这是两次失败的尝试:

Variable Phy: Set.

Fail Let pp (x:Type) := ltac: (match type of x with
       | Set => constr: (Reset Phy)
       | _ => idtac end).
(*Cannot infer an internal placeholder of type "Type" in environment: x : Type*)

Fail Ltac pp x := match type of x with
       | Set => constr: (Reset Phy)
       | _ => idtac end.
(*The reference Reset was not found in the current environment.*)

另外,如果这不是Ltac的工作,也许还有另一种方式吗?

1 个答案:

答案 0 :(得分:2)

简短回答:不。

即使您使用某些黑客实现这一目标,它也会在下一个Coq版本中停止工作。

原因是因为ltac命令的解释发生在比文档解释更低的级别。这个选择可能有争议,但它就是这样。战术在一个恒定的环境中运行,只能访问证据。因此,你可以从ltac做的最多的事情就是修改当前的证明。

您的错误发生是因为Reset确实在ltac无法访问的更高级别进行了解析。

对于环境和文档本身的编程操作,您需要依赖ML代码,或者您可以尝试编写一些接口工具(如SerAPI)来实现您想要的目标。