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