Coq环境的智能化改造

Coq环境的智能化改造,coq,ltac,Coq,Ltac,Ltac用于,和。它也可以用于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:

Ltac用于,和。它也可以用于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的工作,也许还有另一种方法?

简短回答:没有

即使你想通过一些黑客来达到这个目的,它也会在下一个Coq版本中停止工作


原因是,ltac命令的解释级别低于文档解释级别。这一选择可能有争议,但事实就是如此。战术在一个恒定的环境中运行,只能获得证据。因此,从ltac可以做的最多的事情就是修改当前的证明

发生错误的原因是,
Reset
确实是在ltac无权访问的更高级别上解析的

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

简短回答:否

即使你想通过一些黑客来达到这个目的,它也会在下一个Coq版本中停止工作


原因是,ltac命令的解释级别低于文档解释级别。这一选择可能有争议,但事实就是如此。战术在一个恒定的环境中运行,只能获得证据。因此,从ltac可以做的最多的事情就是修改当前的证明

发生错误的原因是,
Reset
确实是在ltac无权访问的更高级别上解析的


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

我不明白这些代码片段想要实现什么;你能详细说明一下吗?如果条件满足,他们正在尝试释放变量
Phy
,我无法理解代码片段试图实现什么;你能详细说明一下吗?他们试图释放变量
Phy
如果满足条件“战术在恒定环境中运行,只能访问证据”这不是完全正确的,因为目前有一种黑客能够在证据中添加定义,但它很可能会消失,因为并行验证处理非常困难。为了完整性,请在验证中添加对hackJust do
定义a:=3的引用。这将改变证据的环境。这本身就是通过数千行代码在Coq的所有源代码中实现的。寻找
副作用
类型作为该部分代码的入口点,但它相当复杂。“战术在恒定的环境中运行,只能获得证据”这并不是完全正确的,因为目前有一种黑客可以在证明中添加定义,但它很可能会消失,因为并行证明处理非常困难。为了完整性,请您在证明中添加一个对hackJust do
Definition a:=3
的引用。这将改变证据的环境。这本身就是通过数千行代码在Coq的所有源代码中实现的。寻找
副作用
类型作为该部分代码的入口点,但它相当复杂。