如何证明forall(p q:Prop),〜p->〜((p - > q) - > p)。使用coq

问题描述 投票:0回答:1

我对coq编程完全不熟悉,无法证明下面的定理。我需要帮助的步骤如何解决下面的构造?

定理PeirceContra:forall(p q:Prop),〜p->〜((p - > q) - > p)。

我尝试了下面的证明。鉴于Axiom classic : forall P:Prop, P \/ ~ P.公理

Theorem PeirceContra: forall (p q:Prop), ~ p -> ~((p  -> q)  -> p).
Proof.
  unfold not.
  intros.
  apply H.
  destruct (classic p) as [ p_true | p_not_true].
  - apply p_true.
  - elimtype False. apply H.
Qed.

使用elimtype后获得subgoal并将H应用为

1 subgoal
p, q : Prop
H : p -> False
H0 : (p -> q) -> p
p_not_true : ~ p
______________________________________(1/1)
p

但是现在我被困在这里因为我无法使用给定公理的p_not_true构造来证明P ......请建议一些帮助......我不清楚如何使用给定的公理来证明逻辑.. ..............

coq
1个回答
0
投票

这个引理可以建设性地证明。如果你考虑在每一步可以做些什么来取得进展,那么引理就证明了这一点:

Lemma PeirceContra :
  forall P Q, ~P -> ~((P -> Q) -> P).
Proof.
  intros P Q np.
  unfold "~".
  intros pq_p.
  apply np.     (* this is pretty much the only thing we can do at this point *)
  apply pq_p.   (* this is almost inevitable too *)

  (* the rest should be easy *)
(* Qed. *)
© www.soinside.com 2019 - 2024. All rights reserved.