Coq:帮助形成非正式证明 定理ev_ev_ev_full:forall n m, 偶数(n+m)(偶数n偶数m)。 证明。 介绍n m。分裂 -简介H.斯普利特。 +介绍H1。应用(ev_ev_ev n m H H1)。 +介绍H1。在H.apply(ev_ev_ev m n H H1)中重写plus comm。 -介绍H。

Coq:帮助形成非正式证明 定理ev_ev_ev_full:forall n m, 偶数(n+m)(偶数n偶数m)。 证明。 介绍n m。分裂 -简介H.斯普利特。 +介绍H1。应用(ev_ev_ev n m H H1)。 +介绍H1。在H.apply(ev_ev_ev m n H H1)中重写plus comm。 -介绍H。,coq,logical-foundations,Coq,Logical Foundations,输出: Theorem ev_ev__ev_full : forall n m, even (n+m) <-> (even n <-> even m). Proof. intros n m. split. - intros H. split. + intros H1. apply (ev_ev__ev n m H H1). + intros H1. rewrite plus_comm in H. apply (ev_ev__ev m n H H

输出:

Theorem ev_ev__ev_full : forall n m,
  even (n+m) <-> (even n <-> even m).
Proof.
  intros n m. split.
  - intros H. split.
    + intros H1. apply (ev_ev__ev n m H H1).
    + intros H1. rewrite plus_comm in H. apply (ev_ev__ev m n H H1).
  - intros H.
n,m:nat
H:偶数n偶数m
============================
偶数(n+m)
现在n可以是偶数,也可以不是偶数

  • 如果n是偶数,那么m也是偶数。然后由evu和定理(n+m)也为偶数

  • 如果n不是偶数,则其形式为(n'+1),其中n'是偶数。m也不是偶数,其形式为(m'+1),其中m'是偶数。所以它们的总和等于:

    n+m=n'+1+m'+1=>n+m=(n'+m')+2

偶数((n'+m')+2)。在
应用ev\u SS
之后,我们得到了偶数(n'+m')。因为我们知道n'是偶数,m'是偶数,所以我们
应用ev\u sum
。这证明了定理


如何用coq写这个非正式的证明?

从以下引理开始:

  n, m : nat
  H : even n <-> even m
  ============================
  even (n + m)
这是一个决策过程:
even_dec n
告诉您
n
是否为
even
,这取决于它返回的是左选项还是右选项
{{{}+{{}
sumbool
的符号。它基本上就像一个
bool
(它在
集合中,因此可以在计算相关的上下文中被销毁),除了它还见证了两个给定的
Prop
中的一个,这取决于备选方案。在证明中,第一步是在此属性上分支:

Theorem even_dec (n : nat) : {even n} + {~even n}. Admitted.
如果
甚至n
,证明就微不足道了

    destruct (even_dec n) as [prf_n | prf_n].
否则,反向含义的反正性告诉我们
~甚至m
。我们还可以消除
not
s:

    + admit.
其余的证明(断言
n=sn'
m=sm'
偶数n'
偶数m'
,因此
偶数(n+m)
)伴随着一些工作(使用
反转


(我自己填写了《承认》
s,这条路径确实成功地找到了证据,但仅仅说出所有答案并不有趣:)

从以下引理开始:

  n, m : nat
  H : even n <-> even m
  ============================
  even (n + m)
这是一个决策过程:
even_dec n
告诉您
n
是否为
even
,这取决于它返回的是左选项还是右选项
{{{}+{{}
sumbool
的符号。它基本上就像一个
bool
(它在
集合中,因此可以在计算相关的上下文中被销毁),除了它还见证了两个给定的
Prop
中的一个,这取决于备选方案。在证明中,第一步是在此属性上分支:

Theorem even_dec (n : nat) : {even n} + {~even n}. Admitted.
如果
甚至n
,证明就微不足道了

    destruct (even_dec n) as [prf_n | prf_n].
否则,反向含义的反正性告诉我们
~甚至m
。我们还可以消除
not
s:

    + admit.
其余的证明(断言
n=sn'
m=sm'
偶数n'
偶数m'
,因此
偶数(n+m)
)伴随着一些工作(使用
反转


(我自己填写了《承认》
s,这条路确实成功地找到了证据,但仅仅说出所有答案并不有趣:)

我证明了自己的观点是对的。你能解释一下,如何证明这一点吗?我不知道该怎么办。很简单:整个证明是
归纳n as[|n rec]。-重复构造函数。-将rec分解为[rec | rec];[右|左];应用偶数+假设+反转清除1为[|?否]。矛盾。
您在
n
上进行归纳
0
是偶数,因此在这种情况下,您将返回带有证明
偶数0的左侧备选方案。对于
sn
,查看
n
是否为偶数,并返回相反的选项。然后使用
偶数
实际“步进”证明所选备选方案正确的
偶数
/
~偶数
证明。你能解释一下,如何证明这一点吗?我不知道该怎么办。很简单:整个证明是
归纳n as[|n rec]。-重复构造函数。-将rec分解为[rec | rec];[右|左];应用偶数+假设+反转清除1为[|?否]。矛盾。
您在
n
上进行归纳
0
是偶数,因此在这种情况下,您将返回带有证明
偶数0的左侧备选方案。对于
sn
,查看
n
是否为偶数,并返回相反的选项。然后使用
偶数
实际“步进”证明所选备选方案正确的
偶数
/
~偶数
证明。