如何在Coq中证明(p-> q)->(〜p \ / q)

时间:2019-04-13 07:29:56

标签: coq

我正在尝试使用公理在Coq中证明(p-> q)->(〜p / q):

Axiom tautology : forall P:Prop, P \/ ~ P.

我试图通过应用p-> q将〜p / q转换为〜p / p。所以做这样的事情:

Theorem Conversion: forall (p q: Prop),(p -> q) -> (~ p \/ q).
Proof.
  intros p q.
  intros p_implies_q.
  (do something here, change ~p\/q into ~p\/p)
  apply tautology...

但是我不知道该怎么办。如果有更好的方法,请告诉我。谢谢!。

1 个答案:

答案 0 :(得分:3)

一种使用tautology的方法是使用策略destruct。这样可以减少p为真而p为非真的情况。

Axiom tautology : forall P:Prop, P \/ ~ P.

Theorem Conversion: forall (p q: Prop),(p -> q) -> (~ p \/ q).
Proof.
  intros p q.
  intros p_implies_q.
  destruct (tautology p) as [p_true | p_not_true].
  - (* prove ~p \/ q using p *)
  - (* prove ~p \/ q using ~p *)
Qed.

您能看到在每种情况下如何证明~p \/ q吗?