如何在COQ中证明存在?

如何在COQ中证明存在?,coq,Coq,我是Coq的新手,我正在尝试证明以下引理(使用Reals库): 现在,当我试图找到一个合适的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 sub

我是Coq的新手,我正在尝试证明以下引理(使用Reals库):

现在,当我试图找到一个合适的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
1子目标
安:nat->R
a:R
A_cv:forall eps:R,
eps>0->存在N:nat,对于所有N:nat,(N>=N)%nat->Rabs(N-a)0
______________________________________(1/1)
存在N:nat,对于所有N:nat,(N>=N)%nat->Rabs(N-a-0)
问题是我不知道如何摆脱“存在N”

这可能吗?如果是,有人能帮我吗


提前谢谢

通常,要消除coq中存在的
,您需要用一个术语来实例化它。如果你手写出来,你可能会写下这样的话,“因为
An
收敛,所以有一些
N
这样…”然后你会在证明中使用这个
N

要在Coq中执行此操作,您需要在
A_cv
上使用
destruct
策略。一旦你有了这个
N
,你就可以用它来实例化并继续你所期望的

完整的参考证据:

Lemma some_lemma : forall (An : nat -> R) (a : R),  Un_cv An a -> Un_cv (fun i : nat => An i - a) 0.
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.
  destruct (A_cv eps eps_pos) as [N HN].
  exists N; intro.
  rewrite Rminus_0_r.
  apply HN.
Qed.

这个例子中令人喜欢的是,你使用了与普通数学证明相同的想法。感谢你快速而有用的回答!
Lemma some_lemma : forall (An : nat -> R) (a : R),  Un_cv An a -> Un_cv (fun i : nat => An i - a) 0.
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.
  destruct (A_cv eps eps_pos) as [N HN].
  exists N; intro.
  rewrite Rminus_0_r.
  apply HN.
Qed.