我经常发现自己处于以下情况,我已经证明了一个含义的引理:
Lemma L1: A -> B
实际上等价A <-> B
是可证明的,但暗示B -> A
是一个微不足道而不是非常有趣的结果。然后在设计一些证据的过程中,我最终得出了假设:
H : A
我实际上想要使用B
。我可以使用剪切:
cut (B).
然后从那里开始,但我确信有一种更快的方法可以正式削弱假设H
,用A
替换语句B
。
我最近一直在做的是回到我的引理并证明这两个含义。
Lemma L1 : A <-> B
然后使用简单的rewrite L1 in H
。所以这适用于等价,但当然不是一般的。那么如何在没有cut
简单暗示的情况下削弱假设呢?
答案 0 :(得分:1)
Coq 8.5引入了一个实验p%term
功能来执行&#34;视图&#34;关于假设,你可以这样做:
Variables (A B C : Prop).
Hypothesis U : A -> B.
Lemma L1 : A -> B.
intros h%U.
但请注意,此功能可能会被删除。当然,如果您愿意使用ssreflect策略,语言视图是必不可少的功能,您可以这样做:
Variables (A B C : Prop).
Hypothesis U : A -> B.
Lemma L1 : A -> B.
by move=> /U.
ssreflect中的视图可以提供更多好处,例如,如果您有假设B
和引理U : A -> B -> C
,您通常可以应用/U
等...请参阅手册更多细节。
答案 1 :(得分:1)
一种简单的方法是使用apply L1 in H.
。
Variables A B : Prop.
Lemma L1 : A -> B. Admitted.
Theorem theorem : A -> 1 = 1.
intros H.
apply L1 in H.
最后一行将H : A
变为H : B
。