我对coq编程完全陌生,无法在定理下证明。我需要有关如何解决以下构造问题的步骤的帮助吗?
我尝试了以下方式的证明。
公理为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后获得子目标并将H用作
1 subgoal
p, q : Prop
H : p -> False
H0 : (p -> q) -> p
p_not_true : ~ p
______________________________________(1/1)
p
但是现在我被困在这里是因为我无法使用给定公理的p_not_true构造来证明P ......请提出帮助... 我不清楚如何使用给定的公理来证明逻辑。......
答案 0 :(得分: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. *)