在校样中,我想将(negb (negb true))
简化为true
(同样使用false
)。
我知道Coq的negb_involutive
程序,但由于我的教科书没有引入它,我认为我应该以某种方式设法仅使用rewrite
或{模仿其功能{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
。