[英]How to prove forall (p q:Prop), ~p->~((p ->q) ->p). using coq
I am completely new to coq programming and unable to prove below theorem. 我对coq编程完全陌生,无法在定理下进行证明。 I need help on steps how to solve below construct?
我需要有关如何解决以下构造的步骤的帮助吗?
I tried the proof below way. 我尝试了以下方式的证明。 Given axiom as
Axiom classic : forall P:Prop, P \\/ ~ 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.
Getting subgoal after using elimtype and apply H as 使用elimtype后获得子目标并将H用作
1 subgoal
p, q : Prop
H : p -> False
H0 : (p -> q) -> p
p_not_true : ~ p
______________________________________(1/1)
p
But now I am stuck here because I am unable to prove P using p_not_true construct of given axiom......Please suggest some help...... I am not clear how to use the given axiom to prove logic................ 但是现在我被困在这里,因为我无法使用给定公理的p_not_true构造来证明P……请提出一些帮助……我不清楚如何使用给定公理来证明逻辑。 ..............
This lemma can be proved constructively. 这个引理可以得到建设性的证明。 If you think about what can be done at each step to make progress the lemma proves itself:
如果您考虑在取得进步的每个步骤中可以做什么,则引理证明了自己:
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. *)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.