我正在通过本书的软件基础来学习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 -> Q
和H2: Q -> R
,目标是P -> R
。在这种情况下,如何使用上述引理来证明目标,即如何将H1
和H2
合并到单个假设H : (P ->Q ) /\ (Q -> R)
中?
答案 0 :(得分:1)
您正在尝试证明以下内容:
Lemma if_trans :
forall (P Q R : Prop),
(P -> Q) /\ (Q -> R) -> (P -> R).
但是您仅介绍P, Q, R
和P -> 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 E1
在E1
成立的假设下证明Q
,因此将P
应用于其中以获得{ {1}},并要求您提供E2 : Q -> R
的证据。
对于第二个问题,如果应用引理,它将要求R
,您可以先用P
然后再用(P -> Q) /\ (Q -> P)
证明。
不过,您不应尝试将split
和assumption
合并为P -> Q
,但如果确实需要,则可以使用Q -> R
。