削减假设没有削减

时间:2016-05-21 11:57:58

标签: coq

我经常发现自己处于以下情况,我已经证明了一个含义的引理:

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简单暗示的情况下削弱假设呢?

2 个答案:

答案 0 :(得分:1)

实际上,这是一种常见现象,一些Coq插件(如ssreflect)为它提供了特殊的支持,称为&#34;假设视图&#34;。恕我直言,在你的情况下重写可能不是那么糟糕。

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