coq - 在 Coq 中使用 `apply with` 而不给出参数名称?

标签 coq coq-tactic

在使用 Coq apply ... 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 , 而不是 on或其他一些名字 y .

对我来说,是否m n ox y z用在定理的原始陈述中应该无关紧要,因为它们就像函数的虚拟变量或形式参数。有时我不记得我在定义定理时使用的特定名称或其他人在不同文件中放置的名称。

有没有办法可以引用变量,例如按他们的位置并使用类似的东西:
apply trans_eq with (@1 := 1)

在上面的例子中?

顺便说一下,我试过:apply trans_eq with (1 := 1).并得到 Error: No such binder.
谢谢。

最佳答案

您可以使用正确的参数专门化引理。 _用于我们不想专门化的所有参数(因为它们可以被推断)。 @需要专门化隐式参数。

Example test: forall n m: nat,
  n = 1 -> 1 = m -> n = m.
Proof.
  intros n m. 
  apply (@trans_eq _ _ 1). 
Qed.

关于coq - 在 Coq 中使用 `apply with` 而不给出参数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32979896/

相关文章:

coq - 如何在 Coq 中使用自定义归纳原理?

coq - 在匹配 block 的分支内,如何使用匹配表达式等于分支的数据构造函数表达式的断言?

coq - 提示重写无法推断参数

coq - 如何在 Coq 简化过程中应用一次函数?

coq - 在 Coq 中,有与 Rabs、Rineq 合作的策略吗?

Coq:在 if-then-else 下重写

coq - 使用模块和类型类改进类型

coq - Coq 中的案例分析证明

Coq:负整数表达式的未知解释

coq - 匹配策略/策略符号内的上下文模式