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