在 Coq 中,如何将假设中的变量引入环境中?

In Coq, how do I introduce a variable from an hypothesis into the environment?

假设我已经 Hypothesis 关于一个值的存在。如何在环境中命名该变量?

示例:

Require Import ZArith.
Open Scope Z.
Hint Resolve Zred_factor0 Zmult_assoc_reverse Z.mul_comm Z.mul_add_distr_l
             Z.mul_1_l Z.mul_0_r Z.mul_0_l Z.abs_nonneg.

Definition divides d n := exists c, d*c = n.
Section divisor.

  Variables (d n a:Z).
  Hypothesis H: divides d n.

现在我想将 cd*c = n 的事实引入环境中,这样我就不必每次都通过破坏 H 来开始我的证明,就像这样:

  Lemma div4: divides (a*d) (a*n).
    destruct H as [c H'].   (*** Here I would like to already have c and H' *) 
    subst; exists c; auto.  
  Qed.

End divisor.

据我所知,没有办法做你想做的事。由于 Prop 消除的限制,我认为实施起来会有点复杂。

在这种特殊情况下,您可以做的一件事是在您的上下文中将 n / d 命名为 c,然后使用您的假设证明一个辅助引理,即 n = c * d.那么你在引理的陈述中仍然会有你的假设,但不必一直破坏它。