(A-> B)/ \(B-> C)->(A-> C)在Coq中?

时间:2020-03-09 15:15:57

标签: coq coq-tactic

我正在通过本书的软件基础来学习Coq,但无法证明以下引理(我需要证明其他定理。)

Lemma if_trans : 
  forall (P Q R: Prop),
    (P -> Q) /\ (Q -> R) -> (P ->R).
Proof.
  intros P Q R [E1 E2]. 
Admitted.

这就是我被困住的地方。我无法破坏命题,尽管我可以apply E2 in E1,但它会生成两个子目标(我不明白为什么),而第二个子目标在逻辑上是无法证明的。请帮忙。我也只知道以下策略:

简单,自反,对称,破坏,归纳,应用,替换,..中,扩展,区分,注入,拆分,左,右,前奏,展开,断言,重写。

第二季度:另一个类似问题的问题。我需要使用以上证明的引理来证明其他定理。因此,假设我有两个假设H1: P -> QH2: Q -> R,目标是P -> R。在这种情况下,如何使用上述引理来证明目标,即如何将H1H2合并到单个假设H : (P ->Q ) /\ (Q -> R)中?

1 个答案:

答案 0 :(得分:1)

您正在尝试证明以下内容:

Lemma if_trans :
  forall (P Q R : Prop),
    (P -> Q) /\ (Q -> R) -> (P -> R).

但是您仅介绍P, Q, RP -> Q的证明,因此您可以证明Q -> R。 同样,您可以使用P -> R来获得intro p作为额外的假设,然后证明p : P

总结一下您有

R

战术之后

P, Q, R : Prop
E1 : P -> Q
E2 : Q -> R
p : P
===============
R

(请注意多余的intros P Q R [E1 E2] p. )。

也许这将使如何证明这一点更加清晰。


使用p时,基本上会发现apply E2 in E1E1成立的假设下证明Q,因此将P应用于其中以获得{ {1}},并要求您提供E2 : Q -> R的证据。


对于第二个问题,如果应用引理,它将要求R,您可以先用P然后再用(P -> Q) /\ (Q -> P)证明。 不过,您不应尝试将splitassumption合并为P -> Q,但如果确实需要,则可以使用Q -> R