如何用Coq证明这个简单的方程

如何用Coq证明这个简单的方程,coq,Coq,我想在Coq中证明: convert l' + 1 + (convert l' + 1) = convert l' + convert l' + 1 + 1 只有一些括号是多余的,不允许我使用reflectivity命令;那我该怎么办 所有元素都是nat(自然)类型,因此convert l'是一个将返回nat编号的函数,我不想使用一些强大的策略,如Omega等。您可以使用Omega策略。只要做需要导入欧米茄。在文件的开头,你就可以开始了。欧米茄非常有用,因为它可以让你很快继续进行更有趣的证明部

我想在Coq中证明:

convert l' + 1 + (convert l' + 1) = convert l' + convert l' + 1 + 1
只有一些括号是多余的,不允许我使用
reflectivity
命令;那我该怎么办


所有元素都是
nat
(自然)类型,因此
convert l'
是一个将返回nat编号的函数,我不想使用一些强大的策略,如Omega等。

您可以使用
Omega
策略。只要做
需要导入欧米茄。
在文件的开头,你就可以开始了。

欧米茄
非常有用,因为它可以让你很快继续进行更有趣的证明部分,但当你学习时,我个人发现看到“更简单”的证明是很有帮助的(omega生成的证明项往往很长且不可读)

首先请注意,您需要使用
plus
的结合性和交换性。使用Coq的搜索工具来查找有用的引理。将
\uuu
用作通配符。您可以查找包含类似结合性结构的引理,如下所示:

SearchAbout (_ + (_ + _)= (_ + _) + _).
定位五个引理,其中包括:

plus_assoc: forall n m p : nat, n + (m + p) = n + m + p
用同样的方法,你可以找到交换引理

SearchAbout (_ + _ = _ + _).
这是:

plus_comm: forall n m : nat, n + m = m + n
你不能直接应用它们,但是你可以使用
重写
策略来处理术语的子部分。我建议你使用它来了解它是如何工作的

这里是期望引理的一个证明

需要导入算术。
引理自然引理:对于所有n,n+1+(n+1)=n+n+1+1。
简介。

重复重写如何证明
n+1+(n+1)=n+n+1+1
对于任何
n:nat
首先?这很麻烦,但是如果你回想一下
nat
是什么,也就是一个Peano数,这很简单。明显的提示:
+
是一个可交换和关联的函数,也许你可以使用它。非常完整。感谢你帮助缩短重写顺序:
现在重写nat.add\u shuffle1加上\u assoc.