Coq Ltac:将目标与依赖于上一个目标名称的类型匹配

Coq Ltac:将目标与依赖于上一个目标名称的类型匹配,coq,dependent-type,theorem-proving,coq-tactic,ltac,Coq,Dependent Type,Theorem Proving,Coq Tactic,Ltac,我正在尝试编写如下所示的Ltac代码: match goal with | [ e : expr, H : (is_v_of_expr e = true) |- _ ] => idtac end. (* The reference e was not found in the current environment *) 问题是,试图匹配上下文中有值的情况,以及关于该值的一些事实。所以我混合了假设名称的名称空间和假设类型。最终目标是为上下文中的每个expr创建一个销毁(是expr

我正在尝试编写如下所示的Ltac代码:

match goal with
    | [ e : expr, H : (is_v_of_expr e = true) |- _ ] => idtac
end.
(* The reference e was not found in the current environment *)
问题是,试图匹配上下文中有值的情况,以及关于该值的一些事实。所以我混合了假设名称的名称空间和假设类型。最终目标是为上下文中的每个
expr
创建一个销毁
(是expr的
)的循环,但要确保它不会通过不断销毁相同的表达式来进行循环


是否可以为类似的内容编写Ltac匹配表达式?

您需要使用嵌套匹配。以下几点应该行得通

match goal with
| e : expr |- _ =>
  match goal with
  | H : is_v_of_expr e = true |- _ => idtac
  end
end.

您需要使用嵌套匹配。以下几点应该行得通

match goal with
| e : expr |- _ =>
  match goal with
  | H : is_v_of_expr e = true |- _ => idtac
  end
end.

这是误导。
?e
将上一个
e
的名称隐藏起来。如果你做了
|[n:nat,H:?n=?n |-|]
,你不能保证
H
等于
nat
s。这是误导。
?e
将上一个
e
的名称隐藏起来。如果您执行
|[n:nat,H:?n=?n |-|]
,则不能保证
H
等于
nat
s。