在使用 Coqapply ... with
策略时,我看到的所有示例都涉及显式指定要实例化的变量的名称。例如,给定一个关于等式传递性的定理。
Theorem trans_eq : forall (X:Type) (n m o : X),
n = m -> m = o -> n = o.
apply
对它:
Example test: forall n m: nat,
n = 1 -> 1 = m -> n = m.
Proof.
intros n m.
apply trans_eq with (m := 1). Qed.
请注意,在最后一行apply trans_eq with (m := 1).
中,我必须记住要实例化的变量的名称是m
,而不是o
或n
或其他一些名称y
。
对我来说,是否在定理的原始陈述中使用m n o
或x y z
使用都无关紧要,因为它们就像虚拟变量或函数的形式参数。有时我不记得我在定义定理时使用的具体名称或其他人放在不同文件中的名称。
有没有一种方法可以让我引用变量,例如通过它们的位置并使用类似的东西:
apply trans_eq with (@1 := 1)
在上面的例子中?
顺便说一句,我试过了:apply trans_eq with (1 := 1).
得到了Error: No such binder.
谢谢。