如何证明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))。 关键是,在逻辑上,证明

我试图证明一个关于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))。

关键是,在逻辑上,证明是通过归纳法进行的。据我所知,道具的定义不是归纳的。在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。你将获得声誉积分。不要害羞——堆栈溢出就是这样工作的。