为什么可以';t反演可以用于Coq中的普遍限定假设吗?
我一直在学习软件基础课程,发现了以下证据() 我很好奇,为什么会有一个断言说为什么可以';t反演可以用于Coq中的普遍限定假设吗?,coq,Coq,我一直在学习软件基础课程,发现了以下证据() 我很好奇,为什么会有一个断言说(px)\/((px)->False),如果我在H中展开,而不在H中展开,我会得到与断言完全相同的H:forall p:Prop,p\/(p->False),只是有一个通用量词 这一点更为明显,因为只要执行apply H,就可以证明该断言,而该步骤的全部原因是对新断言的HP执行inversion HP 问题是,为什么不可能在一开始就直接执行反转H,而省去定义断言的额外步骤,而断言只是复制一个假设?有更好的方法吗?倒装仅适
(px)\/((px)->False)
,如果我在H
中展开,而不在H
中展开,我会得到与断言完全相同的H:forall p:Prop,p\/(p->False)
,只是有一个通用量词
这一点更为明显,因为只要执行apply H
,就可以证明该断言,而该步骤的全部原因是对新断言的HP执行inversion HP
问题是,为什么不可能在一开始就直接执行
反转H
,而省去定义断言的额外步骤,而断言只是复制一个假设?有更好的方法吗?倒装
仅适用于归纳类型的事物,例如或forall
不是归纳型构造函数,因此不能对其执行inversion
。你可以扩展倒置
来表现得像(e)destruct
:如果你给它一些普遍量化的东西,它会产生额外的存在和证明义务,你需要履行这些义务来填补缺失的地方,并破坏结论。然而,这不是它现在的工作方式
我们可以通过应用H
并直接破坏它来进行更直接的证明:
Theorem not_exists_dist :
excluded_middle ->
forall (X:Type) (P : X -> Prop),
~ (exists x, ~ P x) -> (forall x, P x).
Proof.
intros.
destruct (H (P x)).
apply H1.
exfalso. apply H0. exists x. apply H1.
Qed.
Theorem not_exists_dist :
excluded_middle ->
forall (X:Type) (P : X -> Prop),
~ (exists x, ~ P x) -> (forall x, P x).
Proof.
intros.
destruct (H (P x)).
apply H1.
exfalso. apply H0. exists x. apply H1.
Qed.