假设我有一个表格
的目标forall x, A x -> B x -> P
其中x
在P
中不会自由发生(绑定x
未参与结论)。通过在这里做intros
,我将在我的证明中得到三个单独的假设:
x : nat
H0 : A x
H1 : B x
===============
P
但我需要加强我的假设并得到以下结论。
H0 : forall x, A x -> B x
===============
P
这样我就可以x
实例化我需要的东西。
由于x
中没有P
,因此在逻辑上有效
(forall x, A x -> B x -> P) -> ((forall x, A x -> B x) -> P)
我的问题是,我怎样才能在Coq中做到这一点?
答案 0 :(得分:2)
正如安东所指出的,我们需要更多的背景来了解你想要做什么。不过,这里有一些可能对你有帮助的想法。
您首先询问如何从这样的上下文中获取
x : nat
H1 : A x
H2 : B x
到这样的上下文
H : forall x' : nat, A x' -> B x'
即使您知道A
对某些号码有效,也无法为每个B
和A
完成此操作。例如,假设A x
表示“x
是偶数”,B x
表示“x
为零”;就是这样,
A x := exists y, x = 2 * y
B x := x = 0
第一组假设给出的唯一信息是x
为零。然而,第二组假设是矛盾的,因为它断言每个偶数都等于零。既然你不能从一致的假设中添加矛盾的假设,你就不能从第一个上下文转到第二个上下文。
当然,还有其他情况可能会从一个上下文转到另一个上下文:如果您设法证明forall x', A x' -> B x'
假设某些A x
和B x
成立x
1}}。为此,您需要assert
策略。如果你执行
assert (H : forall x', A x' -> B x').
Coq将生成两个子目标:一个是您必须根据先前的假设证明forall x', A x' -> B x'
,另一个是上下文得到新假设H : forall x', A x' -> B x'
。