如何在 Coq 中使用带有假设的策略?

How to use a tactic with a hypothesis in Coq?

我是 Coq 的新手,运行 进入了死胡同。我有一个大致如下的归纳定义(我之前定义过归纳接受):

Inductive fun : accepts -> Prop :=
  | fn1 : fun True
  | fn2 : forall (n : nat )(A : accepts), fun A -> fun (n A).

我要证明的是:

Lemma lem_1  (A : formula) (n : nat) (h : fun (n A)) : fun A.

当然,在开始证明时我得到

 A : accepts
 n : nat
 h : fun (n A)
 ============================
 fun A

我花了很长时间阅读战术,试图找到某种方法将 h 插入我的 fn2 或类似的东西,但我就是找不到办法做到这一点。有人可以在这里指导我并给我一些想法吗?我也尝试过做一些事情来将 fun A 简化为 A 但我也没有成功。非常感谢您的帮助!

您似乎想证明您的 h 假设是使用 fn2 规则产生的。用 Coq 术语来说,这需要 反转 该假设。为此,您可以调用 inversion h。应用是相反的过程:将 fn2 规则与声明 fun A 的假设相结合,得出 fun (n A).