Ltac用于automating proofs and modifying proof environment,outputting strings和defining 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的工作,也许还有另一种方式吗?
答案 0 :(得分:2)
简短回答:不。
即使您使用某些黑客实现这一目标,它也会在下一个Coq版本中停止工作。
原因是因为ltac命令的解释发生在比文档解释更低的级别。这个选择可能有争议,但它就是这样。战术在一个恒定的环境中运行,只能访问证据。因此,你可以从ltac做的最多的事情就是修改当前的证明。
您的错误发生是因为Reset
确实在ltac无法访问的更高级别进行了解析。
对于环境和文档本身的编程操作,您需要依赖ML代码,或者您可以尝试编写一些接口工具(如SerAPI)来实现您想要的目标。