如何证明Coq中的命题可拓性?
我试图证明一个关于Prop的替换定理,但我失败得很惨。下列定理可以用coq证明吗?如果不能,为什么不能如何证明Coq中的命题可拓性?,coq,Coq,我试图证明一个关于Prop的替换定理,但我失败得很惨。下列定理可以用coq证明吗?如果不能,为什么不能 Theorem prop_subst: forall (f : Prop -> Prop) (P Q : Prop), (P <-> Q) -> ((f P) <-> (f Q)). 定理prop\u subst: forall(f:道具->道具)(P Q:道具), (P Q)->(f P)(f Q))。 关键是,在逻辑上,证明
Theorem prop_subst:
forall (f : Prop -> Prop) (P Q : Prop),
(P <-> Q) -> ((f P) <-> (f Q)).
定理prop\u subst:
forall(f:道具->道具)(P Q:道具),
(P Q)->(f P)(f Q))。
关键是,在逻辑上,证明是通过归纳法进行的。据我所知,道具的定义不是归纳的。在Coq中如何证明这样一个定理?您所寻找的是所谓的“可拓性”: 编辑:
你可以承认谓词的可扩展性,正如Coq FAQ中所提到的。答案是:我所寻找的属性称为命题可扩展性,这意味着
对于所有pq:Prop,(pq)->(p=q)
。反之,则微不足道。这是在库Coq.Logic.ClassicalFacts
中定义的内容,以及来自经典的其他事实,即非直觉逻辑。上述定义称为prop_扩展性
,可按如下方式使用:Axiom equittenequal:prop_扩展性
。现在,您可以应用等价物equal
,将其用于重写等。多亏克里斯托弗·米金斯基(Kristopher Micinski)指出了可拓性。这就是命题可拓性
Lemma blah: forall (P Q: Prop), (forall (f:Prop -> Prop), f Q -> f P) -> P = Q.
intros P Q H.
apply (H (fun x => x = Q)).
reflexivity.
Qed.
Section S.
Hypothesis prop_subst:
forall (f : Prop -> Prop) (P Q : Prop),
(P <-> Q) -> ((f P) <-> (f Q)).
Lemma prop_subst_is_ext: forall P Q, (P <-> Q) -> P = Q.
intros.
apply blah.
intro f.
destruct (prop_subst f P Q); assumption.
Qed.
End S.
Check prop_subst_is_ext.
引理blah:forall(pq:Prop),(forall(f:Prop->Prop),fq->fp)->P=Q。
简介P Q H。
应用(H(乐趣x=>x=Q))。
自反性。
Qed。
第S节。
假设属性subst:
forall(f:道具->道具)(P Q:道具),
(P Q)->(f P)(f Q))。
引理prop_subst_是:对于所有pq,(pq)->P=Q。
介绍。
胡说八道。
介绍f。
自毁(prop_subst f P Q);假设。
Qed。
结束S。
检查prop_subst_是否为ext。
我不认为你能证明这一点,但我不知道细节……我可以把它作为一条公理添加进去,但那有点粗俗,不是吗?@MayerGoldberg抱歉,你的问题读得太快了;-)我不认为这是可扩展性:请注意,我只使用了一个函数(作为上下文),而不是两个,就像可扩展性一样。我想要的是所谓的引用透明性:如果A是B,那么我应该能够在任何表达式中用B代替A,而不是在任何包含A的表达式中。另一方面,也许你的意思是“命题扩展性”,这不一样,但似乎给了我我想要的。该死,你打败了我;-),我正要给你指出常见问题解答中的部分,当你自己的答案最合适时,你可以通过将你的答案标记为已接受来帮助我学习Coq。你将获得声誉积分。不要害羞——堆栈溢出就是这样工作的。