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
应用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
是否为偶数,并返回相反的选项。然后使用偶数
实际“步进”证明所选备选方案正确的偶数
/~偶数
证明。