如何证明 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.