如何证明Coq中的命题扩展性?

时间:2012-06-17 12:08:36

标签: coq

我正试图证明一个关于道具的替代定理,而且我的失败是悲惨的。可以在coq中证明以下定理,如果没有,为什么不这样。

  Theorem prop_subst:
    forall (f : Prop -> Prop) (P Q : Prop), 
      (P <-> Q) -> ((f P) <-> (f Q)).

关键是逻辑上的证据是归纳的。就我所见,Prop没有归纳定义。如何在Coq中证明这样的定理?

3 个答案:

答案 0 :(得分:7)

以下是答案:我所寻找的属性称为命题扩展性,意味着forall p q : Prop, (p <-> q) -> (p = q)。相反,是微不足道的。这是Library Coq.Logic.ClassicalFacts中定义的内容,以及来自经典(即非直觉主义)逻辑的其他事实。上面的定义称为prop_extensionality,可以按如下方式使用:Axiom EquivThenEqual: prop_extensionality。现在你可以应用EquivThenEqual,用它来重写等等。感谢Kristopher Micinski指向扩展性。

答案 1 :(得分:4)

您要找的是“ extensionality :”

http://coq.inria.fr/V8.1/faq.html#htoc41

http://coq.inria.fr/stdlib/Coq.Logic.FunctionalExtensionality.html

http://en.wikipedia.org/wiki/Extensionality

编辑:

您可以接受谓词扩展性,如Coq常见问题解答中所述。

答案 2 :(得分:2)

这是命题的延伸性。

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.