如何证明 Coq 中的逻辑等价性?
How to prove logic equivalence in Coq?
我想在 Coq 中证明以下逻辑等价性。
(p->q)->(~q->~p)
这是我尝试过的。我该如何解决这个问题?
Lemma work : (forall p q : Prop, (p->q)->(~q->~p)).
Proof.
intros p q.
intros p_implies_q not_q_implies_not_p.
refine (not_q_implies_not_p).
refine (p_implies_q).
Qed.
两件事可能会有所帮助。
首先,在你的第二个 intros
中,第二个假设不是 not_q_implies_not_p
,而是 not_q
。这是因为目标是(在intros p_implies_q
之后)~q -> ~p
,所以intros
的另一个调用只引入了这个目标的假设:~q
,而离开~p
]作为新的目标。
其次,记住 ~p
只是意味着 p -> False
,这允许我们从 ~p
的目标引入另一个假设。这也意味着你可以使用像 ~p
这样的前提来证明 False
,假设你知道 p
是真的。
所以你的证明应该像这样开始
Lemma work : (forall p q : Prop, (p->q)->(~q->~p)).
Proof.
intros p q.
intros p_implies_q not_q.
intros p_true.
我想在 Coq 中证明以下逻辑等价性。
(p->q)->(~q->~p)
这是我尝试过的。我该如何解决这个问题?
Lemma work : (forall p q : Prop, (p->q)->(~q->~p)).
Proof.
intros p q.
intros p_implies_q not_q_implies_not_p.
refine (not_q_implies_not_p).
refine (p_implies_q).
Qed.
两件事可能会有所帮助。
首先,在你的第二个 intros
中,第二个假设不是 not_q_implies_not_p
,而是 not_q
。这是因为目标是(在intros p_implies_q
之后)~q -> ~p
,所以intros
的另一个调用只引入了这个目标的假设:~q
,而离开~p
]作为新的目标。
其次,记住 ~p
只是意味着 p -> False
,这允许我们从 ~p
的目标引入另一个假设。这也意味着你可以使用像 ~p
这样的前提来证明 False
,假设你知道 p
是真的。
所以你的证明应该像这样开始
Lemma work : (forall p q : Prop, (p->q)->(~q->~p)).
Proof.
intros p q.
intros p_implies_q not_q.
intros p_true.