Logic 如何在Coq中证明以下内容?

Logic 如何在Coq中证明以下内容?,logic,coq,Logic,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. intros p_true. 一些评论: 无论何时,只要您有一个形式为a->B的目标, 您可以使用introsh命令将H:A添加到前提列表中,并留下目标B ~p是p->False的语法糖。

如何在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.
  intros p_true.
一些评论:

  • 无论何时,只要您有一个形式为
    a->B
    的目标, 您可以使用
    introsh
    命令将
    H:A
    添加到前提列表中,并留下目标
    B

  • ~p
    p->False
    的语法糖。因此,如果您的目标是
    ~P
    ,那么
    introsh
    会将
    H:P
    添加到前提列表中,并将目标减少为
    False

  • 如果您的目标是
    Q
    ,并且您有一个前提
    H:p->Q
    ,则执行命令
    apply H
    将您的目标更改为
    p

  • 连续的
    介绍
    命令可以合并为一个命令,因此证明可以缩短为

    Proof.
      intros p q p_implies_q not_q p_true.
      apply not_q.
      apply p_implies_q.
      auto.
    Qed.
    

展开不在*
展开否定的定义(
~
)。你能从那里开始吗?所以我在介绍p_true之后就开始了?你能解释一下我下一步该怎么办吗?如果你在那之后仍然感到困惑,你需要回顾一下你的课程材料,找出你不理解的部分。注意:所有出现的
false
都应该在你的答案中替换为
false
(事实上,这两个术语都存在于标准库中,尽管它们的类型不同− <代码>错误:布尔值与
错误:道具
Proof.
  intros p q p_implies_q not_q p_true.
  apply not_q.
  apply p_implies_q.
  auto.
Qed.