我试图用tatics [intros],[apply],[assume],[destruct],[left],[right],[split]证明这个引理但是失败了。任何人都可以教我如何证明它吗?
Lemma a : (P \/ Q) /\ ~P -> Q.
proof.
一般来说,如何证明容易命题,如假 - > P,P / ~P等?
答案 0 :(得分:5)
你缺少的策略是矛盾,用于证明包含矛盾假设的目标。因为你不允许使用矛盾,我相信你想要应用的引理是 False 的归纳原则。完成后,您可以应用否定命题,并通过假设关闭分支。请注意,您可以比教师要求的更好,并使用所列策略的 none !析取三段论的证明术语相对容易写:
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.
答案 1 :(得分:3)
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.
答案 2 :(得分:2)
为了证明所有这些简单的事情,你有一系列策略tauto
,rtauto
,intuition
和firstorder
。
我相信它们都比tauto更强大,这是直觉命题逻辑的完整决策程序。
然后,intuition
允许你输入一些提示和引理,并且firstorder可以推理出一阶归纳。
doc当然有更多细节,但这些都是你想要用于这些目标的策略。
答案 3 :(得分:0)
请注意,~P
表示P->False
,反转False
假设完成目标(因为False
没有构造函数)。所以你真的需要apply
和inversion
。
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.