在证明,我想简化(negb (negb true))
到true
(同样与false
)简化(negb(neqb真)为true勒柯克:?使用 “改写” 或 “应用”
我知道勒柯克的negb_involutive
程序,但因为我的书还没有出台,我认为我应该以某种方式管理使用仅rewrite
或apply
模仿它的功能。
在证明,我想简化(negb (negb true))
到true
(同样与false
)简化(negb(neqb真)为true勒柯克:?使用 “改写” 或 “应用”
我知道勒柯克的negb_involutive
程序,但因为我的书还没有出台,我认为我应该以某种方式管理使用仅rewrite
或apply
模仿它的功能。
安东说,要解决这一目标的典型程序是使用reflexivity
,或其低级版本apply eq_refl
。
回想一下,勒柯克是基于一种编程语言,在这种情况下,确实~~ (~~ 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
。
你不允许使用'simpl.'?此外,'negb(negb true)= true'可以通过'反身性'来证明,因为左边和右边的定义是相等的。 –
之前没有使用过“简单”,但也许我应该考虑一下。 – Shuzheng
我觉得现在应该已经足够了。还有一个更强大的策略'计算',但它可能会创造更大的条件。你可能想看看这个不错的[cheatsheet](http://adam.chlipala.net/itp/tactic-reference.html)。 –