Functional programming 问:我如何用“sn”替换“n+1”这样的术语?

Functional programming 问:我如何用“sn”替换“n+1”这样的术语?,functional-programming,coq,Functional Programming,Coq,为了使用自反性,我必须以某种方式将n+1转换为sn 这应该是一个相当简单的转换,但我不知道如何告诉Coq去做 如何继续?因为它们不相等,只是相等,所以可以使用sn替换n+1,这将要求您证明这一事实。或者您可以使用标准库中正确引理的rewrite,即add_1_r iirc。通过规范化,1+n的可能副本等于sn,因此如果您有一个引理证明加法的交换性,你可以去n+1=>1+n=>sn。那么我如何证明0+sj=sj呢?这应该可以直接用自反性证明:对+的定义是通过对第一个参数的递归来完成的,所以这里Co

为了使用自反性,我必须以某种方式将n+1转换为sn

这应该是一个相当简单的转换,但我不知道如何告诉Coq去做


如何继续?

因为它们不相等,只是相等,所以可以使用sn替换n+1,这将要求您证明这一事实。或者您可以使用标准库中正确引理的rewrite,即add_1_r iirc。

通过规范化,1+n的可能副本等于sn,因此如果您有一个引理证明加法的交换性,你可以去n+1=>1+n=>sn。那么我如何证明0+sj=sj呢?这应该可以直接用自反性证明:对+的定义是通过对第一个参数的递归来完成的,所以这里Coq知道如何在不重写的情况下将0+foobar简化为foobar。你最初的问题是你想重写n+1,而不是1+n。为了证明1+n等于sn,你不需要做任何事情,这就是定义。