![](/img/trans.png)
[英]How to prove “~(nat = False)”, “~(nat = bool)” and “~(nat = True)” in coq
[英]Coq: Simplify (negb (neqb true) to true using “rewrite” or “apply”?
在证明中,我想将(negb (negb true))
简化为true
(同样使用false
)。
我知道Coq的negb_involutive
过程,但是由于我的教科书没有介绍它,因此我认为我应该以某种方式设法仅使用rewrite
或apply
来模仿其功能。
正如Anton所说,解决此目标的典型过程是使用reflexivity
,或者其较低版本apply eq_refl
。
回想一下Coq是基于一种编程语言的,在这种情况下, ~~ (~~ true)
的执行确实很容易被视为是true
(在这里我缩写~~ x = negb x
),就像返回true
在Python或C中。
apply eq_refl
将解决目标,因为Coq会在试图使事物匹配时尝试“计算”或“减少”术语。 eq_refl
的类型为forall x, x = x
,因此当~~ (~~ true)
减小为true
您的目标现在变为true = true
且可以解决。 在这种情况下, simpl
只会降低目标的可见性,但从技术上讲,不需要证明。
在您的情况下应用negb_involutive
不是惯用的,当negb
的参数是变量时,例如~~ (~~ (~~ x)) = ~~ x
,此引理很有用。
您会发现自己在涉及平等的大多数目标中都使用了rewrite
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.