繁体   English   中英

如何在coq中证明引理“(P \\ / Q)/ \\ ~P - > Q.”

[英]How to prove the lemma “(P \/ Q) /\ ~P -> Q.” in coq?

我试图用tatics [intros],[apply],[assume],[destruct],[left],[right],[split]证明这个引理但是失败了。 任何人都可以教我如何证明它吗?

Lemma a : (P \/ Q) /\ ~P -> Q.
proof.


一般来说,如何证明诸如false-> P,P / ~P等简单命题?

你缺少的策略是矛盾 ,用于证明包含矛盾假设的目标。 因为你不允许使用矛盾,我相信你想要应用的引理是False的归纳原则。 在这样做之后,您可以应用否定的命题并通过假设关闭分支。 请注意,您可以比教练要求做得更好,并且不使用任何列出的策略! 析取三段论的证明术语相对容易写:

Definition dis_syllogism (P Q : Prop) (H : (P ∨ Q) ∧ ¬P) : Q :=
  match H with
    | conj H₁ H₂ =>
      match H₁ with
      | or_introl H₃ => False_ind Q (H₂ H₃)
      | or_intror H₃ => H₃
      end
  end.
Section Example.

  (* Introduce some hypotheses.. *)
  Hypothesis P Q : Prop.

  Lemma a : (P \/ Q) /\ ~P -> Q.
    intros.
    inversion H.
    destruct H0.
      contradiction.
      assumption.
  Qed.

End Example.

为了证明所有这些简单的事情,你有战术家庭tautortautointuitionfirstorder

我相信它们都比tauto更强大,这是直觉主义命题逻辑的完整决策程序。

然后, intuition允许你使用一些提示和引理,并且firstorder可以推理出一阶归纳。

当然,在文档中有更多细节,但这些是你想要用于这些目标的策略。

请记住, ~P表示P->False ,反转False假设完成目标(因为False没有构造函数)。 所以你真的需要applyinversion

Lemma a : forall (P Q:Prop), (P \/ Q) /\ ~P -> Q.
Proof.
  intros. 
  inversion H.
  inversion H0.
  - apply H1 in H2.  (* applying ~P on P gives H2: False *)
    inversion H2.
  - apply H2.
Qed.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM