Coq:使用"重写"或"应用"来简化(negb(neqb true)为真)

时间:2016-11-14 16:35:15

标签: functional-programming coq coq-tactic

在校样中,我想将(negb (negb true))简化为true(同样使用false)。

我知道Coq的negb_involutive程序,但由于我的教科书没有引入它,我认为我应该以某种方式设法仅使用rewrite或{模仿其功能{1}}。

1 个答案:

答案 0 :(得分:4)

正如安东所说,解决这一目标的典型程序是使用reflexivity或其较低级别的版本apply eq_refl

回想一下,Coq基于一种编程语言,在这种情况下,~~ (~~ true)的执行确实很容易被视为true(我缩写为~~ x = negb x),同样的方式它会在Python或C中返回true

apply eq_refl将解决目标,因为Coq会尝试"计算"或者"减少"捆绑以使事情匹配的术语。 eq_refl的类型为forall x, x = x,因此当~~ (~~ true)缩减为true时,您的目标现在变为true = true并且可以解决。在这种情况下,simpl只会降低您看到它的目标,但在证明中技术上不需要。

在您的案例中应用negb_involutive并非惯用,当negb的参数是变量时,此引理很有用,例如在~~ (~~ (~~ x)) = ~~ x中。

你会发现自己在大多数涉及平等的目标中使用rewrite