当我运行下面的Coq脚本时(简化原始脚本):
Inductive w (g: nat): nat -> Prop:=
| z: w g 0.
Lemma x:
forall (i j: nat), w i j -> (forall k: nat, k <= k).
Proof.
Admitted.
Lemma y:
forall (m n: nat),
w m n -> w m n.
Proof.
intros m n H.
apply x in H.
我在最后一行收到以下错误消息:
错误:无法找到变量k的实例。
任何人都可以向我解释为什么会发生这种情况以及为了在上下文中将forall k: nat, k <= k
作为新假设而必须做些什么?
提前致谢, 马库斯。
答案 0 :(得分:1)
由于您的引理x
包含内部通用量化(最后forall k
部分),
Coq无法猜测您想要使用哪个自然数。将x
应用于H
,您只需提供i
和j
。你有两个解决方案:
使用k
语法手动提供相关的apply x with (k := foo) in H
要求Coq使用eapply
策略引入“元变量”(将其视为稍后将填充的打字孔)。
希望它有所帮助, 诉
答案 1 :(得分:0)
而不是apply x in H
,您可以使用pose proof (x _ _ H)
。这将为您提供您正在寻找的假设。
来自Coq战术手册,
apply term in ident
尝试匹配结论 类型为ident
的非依赖类型term
类型的前提,从右到左尝试它们。
我认为这里要注意的关键点是apply
仅适用于非依赖前提,而您希望它匹配的前提i=j
依赖。但是,Coq返回的特定错误消息令人困惑。