如何简化Coq中形式True-> P的假设?

时间:2020-03-23 16:19:52

标签: coq coq-tactic

如果我在证明上下文中有一个看起来像H: True -> P的假设,并且想将其转换为H: P,那么最简单的方法是什么?我尝试了simpl in H,但是它什么也没做,而我发现的唯一方法是极为不满意的pose proof (H Coq.Init.Logic.I) as H。有没有更简单的方法?

1 个答案:

答案 0 :(得分:3)

除了使用p1 <- mydf %>% filter(NAME =="Madison", GENDER =="girl") %>% ggplot(aes(YEAR, RANK)) + geom_point() p1 以外,还有两种处理方法。

使用pose proof

此策略允许您为假设提供论据。 您可以的话

specialize

甚至

specialize (H I).

,如果您要创建副本而不是直接实例化specialize H with (1 := I). ,则可以使用as

使用H

我想这就是您想要的。 forward将要求您证明forward H.的第一个假设。因此,您将执行以下操作:

H

,但您也可以为其提供(关闭目标)策略:

forward H.
- auto.
- (* Then resume with H : P *)
到目前为止,

forward H by auto. (* Now you have one goal, and H has type P *) 尚未成为标准库的一部分。但是,可以很容易地定义它(这是MetaCoq库中的定义)。

forward

请注意,Ltac forward_gen H tac := match type of H with | ?X -> _ => let H' := fresh in assert (H':X) ; [tac|specialize (H H'); clear H'] end. Tactic Notation "forward" constr(H) := forward_gen H ltac:(idtac). Tactic Notation "forward" constr(H) "by" tactic(tac) := forward_gen H tac. 在这里是行不通的,因为按照通常的意义简化假设并不是真正的策略,实际上只是应用一些计算规则的策略,它基本上是评估目标或您所应用的假设它在。 simpl不会减少为True -> P,因为这样会减少一个论点。

相关问题