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

时间:2015-02-13 14:31:10

标签: coq

让我们说我已经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.

现在我想介绍一下c以及d*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.

1 个答案:

答案 0 :(得分:1)

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

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