如何证明COQ中的存在?

时间:2019-02-18 13:38:40

标签: coq

我对Coq并不陌生,我正在尝试证明以下引理(使用Reals库):

forall (An : nat -> R) (a : R),  Un_cv An a -> Un_cv (fun i : nat => An i - a) 0.

现在,当我尝试找到合适的N使得所有n> = N的序列收敛时,我会陷入困境。我知道如何手动操作,但不知道如何将其编程到Coq中。

到目前为止,这是我的证明:

Proof.
  intros An a A_cv.
  unfold Un_cv. unfold Un_cv in A_cv.
  intros eps eps_pos.
  unfold R_dist. unfold R_dist in A_cv.

我还有:

1 subgoal
An : nat -> R
a : R
A_cv : forall eps : R,
       eps > 0 -> exists N : nat, forall n : nat, (n >= N)%nat -> Rabs (An n - a) < eps
eps : R
eps_pos : eps > 0
______________________________________(1/1)
exists N : nat, forall n : nat, (n >= N)%nat -> Rabs (An n - a - 0) < eps

问题是我不知道如何摆脱“存在的N”。

这甚至可能吗?如果是的话,有人可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

通常,要消除coq中的exists N,您需要使用一个术语实例化它。如果您要手工编写此代码,则可能会写到“ An收敛后,N就这样了……”,然后使用{{1} }。

要在Coq中执行此操作,您将需要在N上使用destruct策略。拥有此A_cv后,您就可以使用它实例化并按您期望的方式继续。

充分证据供参考:

N