尽可能推广假设

时间:2017-10-30 12:18:28

标签: coq

假设我有一个表格

的目标
forall x, A x -> B x -> P

其中xP中不会自由发生(绑定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中做到这一点?

1 个答案:

答案 0 :(得分:2)

正如安东所指出的,我们需要更多的背景来了解你想要做什么。不过,这里有一些可能对你有帮助的想法。

您首先询问如何从这样的上下文中获取

x  : nat
H1 : A x
H2 : B x

到这样的上下文

H : forall x' : nat, A x' -> B x'

即使您知道A对某些号码有效,也无法为每个BA完成此操作。例如,假设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 xB 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'