Functional programming Coq:使用“重写”或“应用”将(negb(neqb true)简化为true;?
在证明中,我想将Functional programming Coq:使用“重写”或“应用”将(negb(neqb true)简化为true;?,functional-programming,coq,coq-tactic,Functional Programming,Coq,Coq Tactic,在证明中,我想将(negb(negb-true))简化为true(与false类似) 我知道Coq的negb_对合程序,但由于我的教科书没有介绍它,我认为我应该设法只使用rewrite或apply来模拟它的功能,正如安东所说,解决这个目标的典型程序是使用自反性,或其较低级别的version应用eq\u refl 回想一下Coq是基于编程语言的,在这种情况下,~(~~true)的执行很容易被看作是true(这里我缩写为~~x=negbx),以同样的方式在Python或C中返回true apply
(negb(negb-true))
简化为true
(与false
类似)
我知道Coq的
negb_对合
程序,但由于我的教科书没有介绍它,我认为我应该设法只使用rewrite
或apply
来模拟它的功能,正如安东所说,解决这个目标的典型程序是使用自反性
,或其较低级别的version应用eq\u refl
回想一下Coq是基于编程语言的,在这种情况下,~(~~true)
的执行很容易被看作是true
(这里我缩写为~~x=negbx
),以同样的方式在Python或C中返回true
apply eq\u refl
可以解决这个问题,因为Coq在进行匹配时会尝试“计算”或“减少”术语。eq\u refl的类型是对于所有x,x=x
,因此当~(~~真)
减少为true
您的目标现在变为true=true
,并且可以解决。在这种情况下,siml
只会减少目标,让您看到它,但从技术上讲,证明中不需要它
在您的例子中,应用negb\u对合
不是惯用方法,当negb
的参数是一个变量时,这个引理很有用,如~(~~~~(x))=~~x
你会发现自己在大多数涉及平等的目标中都使用了
rewrite
。你不允许使用siml.
?此外,negb(negb-true)=true
可以通过自反性来证明。
,因为左手侧和右手侧定义上是平等的。没有使用过“siml”以前,但也许我应该研究一下。我认为现在siml
应该足够了。还有一个更强大的策略compute
,但它可能会产生更大的术语。你可能想看看这个漂亮的东西。@Shuzheng,我真的建议你看看交互式课程软件基础,它提供了一个很好的介绍使用Coq。